php與nginx整合

PHP-FPM也是一個第三方的FastCGI進程管理器,它是做爲PHP的一個補丁來開發的,在安裝的時候也須要和PHP源碼一塊兒編譯,也就是說PHP-FPM被編譯到PHP內核中,所以在處理性能方面更加優秀;同時它在處理高併發方面也比spawn-fcgi引擎好不少,所以,推薦Nginx+PHP/PHP-FPM這個組合對PHP進行解析。
FastCGI 的主要優勢是把動態語言和HTTP Server分離開來,因此Nginx與PHP/PHP-FPM常常被部署在不一樣的服務器上,以分擔前端Nginx服務器的壓力,使Nginx專注處理靜態請求和轉發動態請求,而PHP/PHP-FPM服務器專注解析PHP動態請求

#fastcgi 
FastCGI是一個可伸縮地、高速地在HTTP server和動態腳本語言間通訊的接口。多數流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同時,FastCGI也被許多腳本語言所支持,其中就有PHP。
FastCGI是從CGI發展改進而來的。傳統CGI接口方式的主要缺點是性能不好,由於每次HTTP服務器遇到動態程序時都須要從新啓動腳本解析器來執行解析,而後結果被返回給HTTP服務器。這在處理高併發訪問時,幾乎是不可用的。另外傳統的CGI接口方式安全性也不好,如今已經不多被使用了。
FastCGI接口方式採用C/S結構,能夠將HTTP服務器和腳本解析服務器分開,同時在腳本解析服務器上啓動一個或者多個腳本解析守護進程。當HTTP服務器每次遇到動態程序時,能夠將其直接交付給FastCGI進程來執行,而後將獲得的結果返回給瀏覽器。這種方式可讓HTTP服務器專注地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提升了整個應用系統的性能。
Nginx+FastCGI運行原理
Nginx不支持對外部程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過FastCGI接口來調用。FastCGI接口在Linux下是socket,(這個socket能夠是文件socket,也能夠是ip socket)。爲了調用CGI程序,還須要一個FastCGI的wrapper(wrapper能夠理解爲用於啓動另外一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發送給這個socket的時候,經過FastCGI接口,wrapper接納到請求,而後派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接着,wrapper再將返回的數據經過FastCGI接口,沿着固定的socket傳遞給Nginx;最後,Nginx將返回的數據發送給客戶端,這就是Nginx+FastCGI的整個運做過程。

php與nginx整合
php.ini:php的主配置文件
[root@server79 php-5.4.12]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
拷貝php的啓動腳本
[root@server79 fpm]# pwd
/root/php-5.4.12/sapi/fpm
[root@server79 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
給啓動腳本加可執行權限
[root@server79 fpm]# chmod +x /etc/init.d/php-fpm
[root@server79 ~]# vim /usr/local/lnmp/php/etc/php.ini
cgi.fix_pathinfo=0
date.timezone = /Asia/Shanghai
[root@server79 ~]# cp /usr/local/lnmp/php/etc/php-fpm.conf.default /usr/local/lnmp/php/etc/php-fpm.conf
[root@server79 etc]# vim php-fpm.conf
打開註釋pid = run/php-fpm.pid

php-fpm.conf文件參數解析
PHP的全局配置文件是php.ini,在上面的步驟中,已經將此文件複製到了/usr/local/lnmp/php/etc/php.ini下。能夠根據每一個應用需求的不一樣,對php.ini進行相應的配置。
下面重點介紹PHP-FPM引擎的配置文件。
根據上面指定的安裝路徑,PHP-FPM的默認配置文件爲/usr/local/lnmp/php/etc/php-fpm.conf。
php-fpm.conf是一個XML格式的純文本文件,其內容很容易看明白。這裏重點介紹幾個重要的配置標籤:
標籤listen_address是配置fastcgi進程監聽的IP地址以及端口,默認是127.0.0.1:9000。
listen = 127.0.0.1:9000
標籤user和group用於設置運行FastCGI進程的用戶和用戶組。須要注意的是,這裏指定的用戶和用戶組要和Nginx配置文件中指定的用戶和用戶組一致。
user = nginx
group = nginx
標籤max_children用於設置FastCGI的進程數。根據官方建議,小於2GB內存的服務器,能夠只開啓64個進程,4GB以上內存的服務器能夠開啓200個進程。
<value name="max_children">5</value>
標籤request_terminate_timeout用於設置FastCGI執行腳本的時間。默認是0s,也就是無限執行下去,能夠根據狀況對其進行修改。
<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。
pm.max_requests = 500
標籤allowed_clients用於設置容許訪問FastCGI進程解析器的IP地址。若是不在這裏指定IP地址,Nginx轉發過來的PHP解析請求將沒法被接受。
<value name="allowed_clients">127.0.0.1</value>
5.管理FastCGI進程
在配置完php-fpm後,就能夠啓動FastCGI進程了。啓動fastcgi進程有兩種方式:
/usr/local/php/bin/php-cgi --fpm 
或者
/usr/local/php/sbin/php-fpm start 
建議採用第二種方式啓動FastCGI進程。
/usr/local/php/sbin/php-fpm還有其餘參數,具體爲start|stop|quit|restart|reload|logrotate。
每一個啓動參數的含義以下:
q start,啓動PHP的FastCGI進程。
q stop,強制終止PHP的FastCGI進程。
q quit,平滑終止PHP的FastCGI進程。
q restart,重啓PHP的FastCGI進程。
q reload,從新加載PHP的php.ini。
q logrotate,從新啓用log文件。
reload是個很重要的參數,它能夠在PHP的FastCGI進程不中斷的狀況下從新加載改動過的php.ini,所以經過php-fpm能夠平滑變動FastCGI模式下的PHP設置。

[root@server79 etc]# /etc/init.d/php-fpm start
配置nginx的主配置文件,打開與php的接口
[root@server79 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server79 conf]# vim nginx.conf
user nginx;
#
location ~ \.php$ {
root html; 
fastcgi_pass 127.0.0.1:9000; //本地9000端口
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@server79 conf]# nginx -t^C
[root@server79 conf]# nginx -s reload^C
[root@server79 html]# pwd
/usr/local/lnmp/nginx/html
[root@server79 html]# cat index.php
<?php
phpinfo()?>
測試:瀏覽器中輸入192.168.0.179/index.php,出現php頁面php

相關文章
相關標籤/搜索