fastcgi安裝
這里及以下的web服務器都是以nginx為例子和說明,php以5.3為例子。
php-fpm
fastcgi在服務器上會啟動多個進程進行解析,這個時候就需要一個fastcgi的管理器,管理哪個子進程可以結束,哪個進行應該開啟了。
fastcgi的進程管理器有兩種,spawn-fcgi和php-fpm。其中的spawn-fcgi一般是和lighttp配合使用的。而php-fpm一般會配合nginx來使用。
安裝
下載php和php-fpm源碼包
php下載地址:http://php.net/downloads.php
php-fpm下載地址:http://php-fpm.org/downloads/
在下載php-fpm的時候,需要盡量使php版本和php-fpm版本一致或者版本差別最小,否則有可能會出現兼容性的問題。
配置安裝環境
php需要下面軟件的支持,如果沒有安裝,請自行安裝:
gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel
編譯安裝php和php-fpm
[root@localhost local]#tar zxvf php-5.2.13.tar.gz
[root@localhost local]#gzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1
[root@localhost local]#cd php-5.2.13
[root@localhost php-5.2.13]#./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpm
[root@localhost php-5.2.13]#make
[root@localhost php-5.2.13]#make install
[root@localhost php-5.2.13]cp php.ini-dist /usr/local/php/lib/php.ini
配置與優化php-fpm
php的配置文件存放在 /usr/local/php/lib/php.ini中。
而php-fpm的配置文件存放在 /usr/local/php/etc/php-fpm.conf中
其中的幾項配置需要注意:
標簽listen_address是配置fastcgi進程監聽的IP地址以及端口,默認是127.0.0.1:9000。
<value name="listen_address">127.0.0.1:9000</value>
標簽display_errors用來設置是否顯示PHP錯誤信息,默認是0,不顯示錯誤信息,設置為1可以顯示PHP錯誤信息。
<value name="display_errors">0</value>
標簽user和group用於設置運行FastCGI進程的用戶和用戶組。需要注意的是,這里指定的用戶和用戶組要和Nginx配置文件中指定的用戶和用戶組一致。
<value name="user">nobody</value>
<value name="group">nobody</value>
標簽max_children用於設置FastCGI的進程數。根據官方建議,小於2GB內存的服務器,可以只開啟64個進程,4GB以上內存的服務器可以開啟200個進程。也可以根據服務的內存數來估計需要開啟多少fastcgi進程數。大概一個fastcgi進程占20M的內存。
<value name="max_children">5</value>
標簽request_terminate_timeout用於設置FastCGI執行腳本的時間。默認是0s,也就是無限執行下去,這個參數設置好了可以用於保證不會有執行時間過長的php阻塞住fastcgi進程。
<value name="request_terminate_timeout">0s</value>
標簽rlimit_files用於設置PHP-FPM對打開文件描述符的限制,默認值為1024。這個標簽的值必須和Linux內核打開文件數關聯起來,例如要將此值設置為65535,就必須在Linux命令行執行'ulimit -HSn 65536'。
<value name="rlimit_files">1024</value>
標簽max_requests指明了每個children最多處理多少個請求后便會被關閉,默認的設置是500。
為什么會需要這個參數設置呢?php和fastcgi都是C寫的,一些php模塊什么的有可能實際上存在着內存泄露等問題,所以一般php作為守護進程一直執行是不大可取的行為。既然php有可能有內存泄露的問題,那么如果fastcgi進程一直執行着,那么就有可能導致機器的內存出現吃爆的現象。所以在執行一段時間之后,我們是希望fastcgi能自動重啟動。這個參數就是做這個用的。
<value name="max_requests">500</value>
標簽allowed_clients用於設置允許訪問FastCGI進程解析器的IP地址。如果不在這里指定IP地址,Nginx轉發過來的PHP解析請求將無法被接受。
<value name="allowed_clients">127.0.0.1</value>
啟動php-fpm
/usr/local/php/sbin/php-fpm start