LAMP組合 PHP以FPM模式工作

fastcgi:php-5.3.3 之後的版本自帶了fpm組件,

fpm組件能把PHP解釋器工作爲守護進程,並提供類似prefork模式的應用,它能夠接收來自前端httpd,http-proxy-fcgi反向代理用戶對動態內容請求至後端的fastcgi server

構建分離式LAMP需要注意的地方:

1、動態資源部署在應用程序服務器上(php-fpm),靜態資源部署在Web服務器上

2、php以fpm工作方式時,它不會被編譯成httpd模塊,因此,編譯時無須使用--with-apxs2=/PATH

參數,httpd的主配置文件中也無須再 LoadModule php5_module

把php編譯爲fpm工作模式時需要開啓的重要的參數 --enable-fpm

3、編譯php時,需連接mysql或其他數據庫管理系統時,需要啓用其相關的驅動模塊。

4、php與mysql不在同一節點,連接mysql的用戶賬號需要有遠程訪問權限。

 

編譯安裝php

#tar xf php-5.4.0.tar.bz2

#cd php-5.4.0

#./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --enable-mbstring --with-freetype-dir--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml--with-mcrypt --with-bz2 --with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm

#make && make install

爲php提供配置文件

#mkdir /etc/{php,php.d} –pv

#cp php.ini-production /etc/php/php.ini

配置php-fpm

#cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm  (服務腳本)

#chmod +x /etc/rc.d/init.d/php-fpm (添加執行權限)

#chkconfig –add php-fpm (添加到服務列表中)

#chkconfig php-fpm on

爲php-fpm提供配置文件

#cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

編輯php-fpm的配置文件,配置fpm的相關選項爲你所需要的值,並啓用pid文件(如下最後一行):

# vim /usr/local/php/etc/php-fpm.conf

listen = 192.168.100.114:9000

pm.max_children = 50   ###靜態方式下開啓的php-fpm進程數量

pm.start_servers = 5   ###動態方式下的起始php-fpm進程數量

pm.min_spare_servers = 2   ###動態方式下的最小php-fpm進程數量

pm.max_spare_servers = 8   ###動態方式下的最大php-fpm進程數量

pid = /usr/local/php/var/run/php-fpm.pid    ###PID文件路徑

 

說明:如果dm設置爲static,那麼其實只有pm.max_children這個參數生效。系統會開啓設置數量的php-fpm進程。

如果dm設置爲 dynamic,那麼pm.max_children參數失效,後面3個參數生效。

系統會在php-fpm運行開始的時候啓動pm.start_servers個php-fpm進程,然後根據系統的

需求動態在pm.min_spare_servers 和pm.max_spare_servers之間調整php-fpm進程數。

當php-fpm工作爲獨立守護進程時,默認監聽在127.0.0.1:9000 端口上,即默認至允許本機上的

httpd進程訪問,當前環境是httpd和php分別在不同服務器安裝,因此要修改監聽端口,讓其他主機

能夠訪問。

各自以fast-cgi方式工作時,前端的Web服務器必須以fcgi模塊跟後端主機進行通信。

 

啓動php-fpm

#service php-fpm start

驗證是否啓動成功

#netstat –tnlp|grep php-fpm

tcp        0      0 192.168.100.114:9000        0.0.0.0:*                   LISTEN      32873/php-fpm

 

httpd相關配置

1、啓用httpd的相關模塊

在Apache httpd2.4以後已經專門有一個模塊針對FastCGI的實現,此模塊爲mod_proxy_fcgi.so,

它其實是作爲mod_proxy.so模塊的擴充,因此,這兩個模塊都要加載

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

開啓虛擬主機開關

Include /etc/httpd/extra/httpd-vhosts.conf

2、配置虛擬主機支持使用fcgi

在相應的虛擬主機中添加類似如下兩行:

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

ProxyRequests Off:關閉正向代理

ProxyPassMatch:把以.php結尾的文件請求發送到php-fpm進程,php-fpm至少需要知道運行的目錄和URI

所以這裏直接在fcgi://127.0.0.1:9000 後指明瞭這兩個參數

其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。

需要注意的問題:

動態資源需要放在PHP服務器上,當httpd服務器接收到客戶端瀏覽器請求的是動態頁面內容時,

會把請求發往指定的PHP服務器上處理,但是靜態頁面例如:html、jpg等還是會在httpd服務器上

處理,不然圖片等信息可能就無法顯示,因此在部署網站時,需要把網站的資源分開部署在兩邊。

分別在HTTPD服務器和PHP服務器上各自創建同樣路徑的目錄,不然啓動httpd服務時會報錯。

編輯虛擬主機配置文件:

# vim /etc/httpd/extra/httpd-vhosts.conf

<VirtualHost *:80>

ServerAdmin [email protected]

DocumentRoot "/data/web/www/"

ServerName phpinfo.luanyh.com

ServerAlias luanyh.com

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.100.114:9000/data/web/www/$1

ErrorLog "/usr/local/apache/logs/phpinfo-error_log"

CustomLog"/usr/local/apache/logs/phpinfo-access_log" common

</VirtualHost>

<Directory "/data/web/www/">

AllowOverride None

Options None

Require all granted

</Directory>

<IfModule dir_module>

DirectoryIndex index.php index.html

</IfModule>

創建虛擬主機主頁(在PHP Server上),測試httpd能否支持php

# vim /data/web/www/index.php

編輯如下內容:

<?php

phpinfo();

?>

客戶端瀏覽器上測試:

此時,Server API 工作模式爲:FPM/FastCGI

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章