1.nginx與PHP的關系
首先來看nginx與php的關系,
FastCGI的關系(而不是像apache那樣安裝成nginx的模塊)

FastCGI的意思是, 快速的通用網關接口:CGI Common Gateway Interface, 通用網關接口, 典型的web服務器與處理程序通訊的方式.
FPM, PHP'提供的用於管理FastCGI進程的功能.
2.安裝帶有FPM功能的PHP
linux
還是之前的PHP源碼包, 還是原來的安裝步驟.
僅僅在配置PHP安裝時, 增加選項,開啟FPM即可:
--enable-fpm

安裝過程沒有變化!
windows
可以提供FPM功能, 默認都提供:
由 php-cgi.exe 完成.
基本不需要處理. 一點, TS和NTS的選擇需要注意:
以模塊的方式安裝, 通常需要安裝TS版本, 線程安全版本.
以FPM的形式安裝, 建議安裝NTS版本, 非線程安全版本.

解壓, 拷貝即可. 不需要配置與web服務器的模塊加載.

3.管理PHP-FPM
PHP的FPM需要獨立運行, 有自己的獨立的配置文件. 等等.
默認情況下, FPM監聽某個(127.0.0.1:9000)端口, 等待nginx(或者其他的web服務器)將請求轉過來.
由於PHP獨立運行了, 再修改PHP的配置, 就不需要重啟web服務器(nginx)了, 重啟PHP-FPM即可.
僅僅去參考 nginx與PHP來看: 理解成: Nginx是PHP的客戶端, PHP為nginx提供服務(執行PHP程序的服務).
fpm的配置文件
先拷貝獲取fpm的獨立配置文件, 在etc/目錄中:

編輯 etc/php-fpm.conf
幾個必要的配置
1.守護進程化(后台執行)

2.運行用戶

3.所監聽的IP和端口

4.主進程號

開啟, 關閉, 重載配置操作
開啟: sbin/php-fpm

通過信號的方式, 進行重啟, 關閉, 重載配置文件等處理:
停止:kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
平滑停止:kill -QUIT `cat /usr/local/php/var/run/php-fpm.pid`
重啟:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
重新打開日志:kill -USR1 `cat /usr/local/php/var/run/php-fpm.pid`

4.配置Nginx將PHP請求轉發給PHP-FPM
nginx的配置文件結構:
http段的server段, 就表示一台主機(虛擬主機).
在每台虛擬主機, server段中, 提供對請求腳本的解析工作:
location指令, 匹配請求的URL腳本. 以.php結尾的請求, 交給PHP-FPM處理:
示例配置如下:

重新加載nginx

建立phpinfo.php測試文件

測試效果, 要保證 nginx與PHP-FPM都執行.

5.將php.ini放在合理的目錄
拷貝默認配置


修改必要的配置

6.重啟 php-fpm


7.虛擬主機的配置
虛擬主機
http中的server就是一個虛擬主機,增加server段, 就是增加虛擬主機:

重啟nginx

建立測試項目
還是通過git clone, 配置nginx虛擬主機后出現404Not Found 測試發現動作不能被解析

原因是Nginx對pathinfo不支持
pathinfo: URL的一部分, 請求腳本到請求參數間的部分, 稱之為pathinfo.
PHP程序要處理pathinfo, 前提是web服務器支持URL的pathinfo部分才可以.
解決方法:通過額外的解析pathinfo指令可以完成:
在 location ~ \.php$ 解析段中, 增加分析pathinfo的功能:
nginx.conf中:

重啟nginx sbin/nginx -s reload
此時pathinfo的url的就可以解析.到此Nginx下配置php虛擬主機到此結束。
