Nginx|Apache web服務器發佈靜態頁面,MYSQL開源、收費,(Mariadb開源免費)、PHP一門解釋性動態語言(網頁代碼index.php),PHP模塊解析,基於Apache+PHP整合,互聯網主流發佈PHP網站架構。Apache將頁面請求交給PHP模塊,由PHP模塊去解析該頁面,解析完畢PHP解釋器將頁面內容返回給Apache,apache最終返回給用戶php
一、當客戶請求的是靜態資源時,web服務器會直接把靜態資源返回客戶端;css
二、當客戶請求的是動態資源時,httpd的php模塊會進行相應的動態資源運算,若是此過程還須要數據庫的數據做爲運算參數時,php會鏈接mysql獲取數據後進行運算,運算的結果轉爲靜態資源由web服務器返回到客戶端html
圖1-1 LAMP架構圖mysql
根據圖1-1中訪問數據流可知,處理一次動態頁面請求,服務器主要經歷:Apache處理請求——經過CGI接口訪問PHP的的應用程序——PHP應用程序調用PHP解釋器執行PHP代碼——PHP程序訪問調用數據庫——最後給客戶作反饋。故在LAMP的環境機構中,apache、mariadb和php的主要功能分別以下。linux
apache主要實現以下功能:nginx
第一:處理http的請求、構建響應報文等自身服務;c++
第二:配置讓Apache支持PHP程序的響應(經過PHP模塊或FPM);web
第三:配置Apache具體處理php程序的方法,如經過反向代理將php程序交給fcgi處理。面試
mariadb主要實現以下功能:sql
第一:提供PHP程序對數據的存儲;
第二:提供PHP程序對數據的讀取(一般狀況下從性能的角度考慮,儘可能實現數據庫的讀寫分離)。
php主要實現以下功能:
第一:提供apache的訪問接口,即CGI或Fast CGI(FPM);
第二:提供PHP程序的解釋器;
第三:提供mairadb數據庫的鏈接函數的基本環境。
由此可知,要實現LAMP在配置每個服務時,安裝功能需求進行配置,便可實現LAMP的架構,固然apache、mariadb和php服務均可配置爲獨立服務,安裝在不一樣電腦之上。
根據上述介紹,可知PHP的主要三大功能提供CGI接口、PHP解釋器和PHP與數據庫的鏈接,其中PHP的工做模式有兩種一種是編譯爲appache的模塊,另一種是獨立運行,可是在獨立運行時,又可分爲多種,所以PHP獨立運行時,具體數據庫鏈接編譯分類以下:
第一種:RPM安裝的數據庫與php在同一臺服務器
RPM安裝的數據庫與PHP在同一臺服務器時,此時數據庫編譯時,數據庫鏈接編譯方式採用以下選項
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
第二種:RPM安裝的數據庫與PHP不在同一臺服務器
RMP安裝的數據庫與PHP不在同一臺服務器時,此時數據庫編譯時,數據庫鏈接編譯方式採用以下選項,由於當指定數據庫安裝位置時,沒法找到頭文件等相關源碼程序:
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
第三種:二進制安裝數據庫與PHP在同一臺服務器
二進制安裝數據庫時,需指定二進制數據庫的安裝的具體目錄,所以PHP鏈接數據庫時,能夠調用數據庫程序中的數據庫鏈接工具,所以鏈接數據庫編譯方式能夠採用以下方式:
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config |
第四種:二進制安裝數據庫與PHP不在同一臺服務器
二進制安裝數據庫與PHP不在同一臺服務器時,只能調用mysqlnd鏈接模塊,由於沒法調用二進制安裝數據庫的鏈接數據庫程序,所以只能選擇鏈接模塊:
--enable-mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
另外根據上述架構圖中能夠PHP具備承上啓下的做用,位置舉足輕重,上面講述了編譯過程當中與數據庫的關係,固然和apache關係也一樣重要,具體也能夠分爲三類,具體以下
1)源碼安裝比較麻煩,須要解決各類依賴,方便管理,方便定製各類功能;
2)二進制rpm|yum安裝,自動解決依賴,不利於管理,不能定製功能;
3)線上生產環境推薦源碼安裝,方便管理,定製須要的功能;
關係型數據庫特色:
一、數據以表格的形式出現;
二、每行記錄數據的真實內容;
三、每列記錄數據真實內容的數據域;
四、無數的行和列組成一張表;
五、若干的表組成一個數據庫;
Apache性能調優
1)Apache WEB服務器,多模塊,基於多個模塊工做,須要某個模塊就添加,不須要就無需添加模塊;
2)Apache優化,選擇Apache MPM處理請求方式,Prefork模式、Worker模式、Event模式,其中Prefork默認模式;
3)Prefork模式,預派生多進程方式,每一個進程包含一個線程,每一個線程同一時刻只能處理一個請求,進程之間是獨立的,沒有影響,一個進程掛掉,不影響其餘的進程,穩定、靠譜,缺點佔用內存、CPU資源高
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默認啓動Apache工做進程數;
MinSpareServers 5 最小空閒進程數;
MaxSpareServers 20 最大空閒進程數;
ServerLimit 4096 Apache服務器最多進程數;
MaxClients 4096 每秒支持的最大客戶端併發;
MaxRequestsPerChild 4000 每一個進程能處理的最大請求數;
</IfModule>
4)Work模式,預派生多進程方式,每一個進程包含多個線程,每一個線程同一時刻只能處理一個請求,進程之間是獨立的,沒有影響,一個進程掛掉,不影響其餘的進程,可是若是一個進程中某個線程奔潰,整個進程及旗下全部線程都會奔潰,並且全部的線程共享該進程全部資源,相對穩定,高性能,應用於高併發!
5)Event模式,不支持HTTPS,通常用的比較少,性能比較強悍,比prefork模式性能高,Apache官網推薦在測試環境使用;
3)Prefork模式,
<IfModule prefork.c> Prefork MPM引擎配置段;
StartServers 8 默認啓動Apache工做進程數;
MinSpareServers 5 最小空閒進程數;
MaxSpareServers 20 最大空閒進程數;
ServerLimit 4096 Apache服務器最多進程數;
MaxClients 4096 每秒支持的最大客戶端併發;
MaxRequestsPerChild 4000 每一個進程能處理的最大請求數;
</IfModule>
<IfModule worker.c> Worker MPM引擎配置段;
StartServers 8 默認啓動Apache工做進程數;
MaxClients 4000 每秒支持的最大客戶端併發;
MinSpareThreads 25 最小空閒線程數;
MaxSpareThreads 75 最小空閒線程數;
ThreadsPerChild 75 每一個進程啓動的線程數;
MaxRequestsPerChild 0 每一個進程能處理的最大請求數,0表示無限制;
</IfModule>
MYSQL主從原理(面試必備):
Slave將同步的數據存放到本地relay-log中繼日誌中,SQL線程實時監測而且在本地執行.
LAMP兩種方法,第一種基於YUM在線安裝:
yum install httpd httpd-devel mysql mysql-server mysql-devel php php-devel php-mysql php-comon -y
service httpd restart
service mysqld restart
yum install -y apr-devel apr-util
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxvf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-echo --enable-info
make
make install
預編譯,提早檢查操做系統可否知足httpd軟件安裝,有沒有GCC(編譯庫);
make -j8 基於GCC庫進行編譯,主要是生成可運行二進制文件;
make -j8 install 將編譯後的二進制文件cp至Linux prefix目錄;
cd /usr/local/src
wet -c http://museum.php.net/php5/php-5.3.10.tar.gz
yum install -y gb curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel
cd php-5.3.10
./configure --prefix=/usr/local/php5 --enable-fpm --enable-debug --with-gb --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-curl --with-musql=/usr/local/mysql55/ --with-mysqli=/usr/local/mysql55/bin/mysql_config --with-config-file-path=/usr/local/php55/etc
make
make install
cp php.ini-development /usr/local/php5/etc/php.ini
安裝php-5.3.28
cd /usr/local/src
wget -c http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55/
make
make install
MYSQL數據庫源碼編譯
yum install gcc gcc-c++ glibc glibc-devel cmake ncurses-devel ncurses -y
cd /usr/local/src
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar –xzf mysql-5.5.20.tar.gz
cd mysql-5.5.20
./configure --prefix=/usr/local/mysql5/|cmake替代./configure
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
安裝mysql-5.1.63
cd /usr/local/src
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz
tar xvf mysql-5.1.63.tar.gz
cd mysql-5.1.63
./configure --prefix=/usr/local/mysql --enable-assemble && make make install
配置Mysql服務爲系統服務
cp /usr/local/mysql/share/mysql/mysql-medium.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
cd /usr/local/mysql
useradd mysql
chown -R mysql.mysql /usr/local/mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R mysql var
/usr/local/mysql/bin/mysql_safe --user=mysql &&
nginx安裝配置
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
useradd www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
MYSQL安裝配置
yum install cmake ncurses-devel ncurses -y
weg http://down.chinaunix.net/disfiles/mysql-5.5.20.tar.gz
Apache+PHP源碼整合
爲了能讓Apache發佈PHP頁面,須要將PHP安裝完成後的libphp5.so模塊與Apache進行整合,vim httpd.conf編輯配置文件,加入以下代碼:
LoadModule php5_module modules/libphp5.so (默認已存在)
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.htm
建立PHP測試頁面,在/usr/local/apache/htdocs目錄下建立index.php測試頁面,執行以下命令自動建立:
cat >/usr/local/apache/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
從新啓動Apache服務,瀏覽器輸入 Apache WEB的IP訪問,如圖12-4所示,即表明LAMP源碼環境整合成功。
MYSQL源碼設置爲系統服務:
將源碼安裝的Mysql數據庫服務設置爲系統服務,可使用chkconfig管理,並啓動MYSQL數據庫
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
使用shell安裝LAMP
#!/bin/bash
#2017年7月19日15:09:44
#by author www.jfedu.net
#auto install lamp for Linux
###############
#Install Httpd Web service
wget -c http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
tar -jxf httpd-2.2.34.tar.bz2
cd httpd-2.2.34
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite
make -j8
make -j8 install
#Install mysql db service
yum install cmake ncurses-devel ncurses –y
wget http://down1.chinaunix.net/distfiles/mysql-5.5.20.tar.gz
tar -xzf mysql-5.5.20.tar.gz
cd mysql-5-5.20
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make
make install
#Config mysql db 2017
cd /usr/local/mysql55/
\cp support-files/my-large.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
mkdir -p /data/mysql
useradd mysql
/usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql55/
ln -s /usr/local/mysql55/bin/* /usr/bin/
service mysqld restart
#Install PHP WEB service
wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar jxf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql55
#config lamp 2017
echo "AddType application/x-httpd-php .php" >>/usr/local/apache2/conf/httpd.conf
sed -i 's/index.html/index.php index.html/g' /usr/local/apache2/conf/httpd.conf
cat>/usr/local/apache2/htdocs/index.php<<EOF
<?php
phpinfo();
?>
EOF
常見問題:
一、
Starting MySQL.. ERROR! The server quit without updating PID file (/data/mysql/www-jfedu-net.pid).
解決問題的步驟:
二、unzip wordpress-4.7.4-zh_CN.zip
-bash: unzip: command not found
錯誤解決方法:yum install zip unzip –y
三、軟件與系統不兼容
apr軟件包問題
解決辦法:把apr或者apache降版本,換成httpd-2.2.32.tar.gz,編譯的時候去掉,apr編譯的部分
連接:
Red Hat Enterprise Linux 4+Nginx 0.7.47+PHP5.2+MYSQL5.0+Memcache+eAccelerator : https://www.jb51.net/os/RedHat/15751.html
RHEL 7.0 編譯安裝Nginx1.6.0+MySQL5.6.19+PHP5.5.14運行環境 : https://www.jb51.net/os/RedHat/192933.html
yum 安裝CentOS 7系統安裝lamp環境 https://mp.weixin.qq.com/s/_WWK9emHCnSoRTgWC8tImA
VMware虛擬機安裝CentOS 7並搭建Lamp服務器環境 https://mp.weixin.qq.com/s/VE_BOgMciB8FDkl-hL6Nsw
.htaccess中的apache rewrite規則詳解 : http://blog.51cto.com/xiaogongju/2060949
Centos6.3下Apache配置基於加密的認證https加密證書訪問 : https://www.jb51.net/os/RedHat/81409.html
CentOS搭建LAMP服務器環境硬盤分區方案分享 : https://www.jb51.net/os/RedHat/86180.html
Linux操做系統下提升PHP性能的工具APC : https://www.jb51.net/os/RedHat/1322.html
PHP startup: Unable to load dynamic library錯誤的錯誤 : https://www.jb51.net/os/RedHat/1314.html
centos5 源碼安裝Nginx + mysql + apache + php的方法 : https://www.jb51.net/os/RedHat/35925.html
Centos 5.5 php5.1.2升級到php5.2.6的方法 : https://www.jb51.net/os/RedHat/35036.html
Centos Nginx + Svbversion配置安裝方法分享 : https://www.jb51.net/os/RedHat/35924.html
Centos5.2配置LAMP與Centos5.3配置LAMP : https://www.jb51.net/os/RedHat/22433.html
LAMP服務器性能優化技巧之加速PHP : https://www.jb51.net/article/29721.htm
RedHat AS4上安裝配置Apache2.2.4+PHP5.2.3+MySQL5.0.45+openssl0.98e : https://www.jb51.net/os/RedHat/1132.html