Nginx支持php配置

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運行原理

修改主配置文件,如下:

  1. # vim/usr/local/nginx/conf/nginx.conf 
  2.   location / { 
  3.            root   /www; 
  4.            index  index.html index.htm index.php; 
  5.         } 
  6.        location ~ \.php$ { 
  7.             root           /www; 
  8.             fastcgi_pass   127.0.0.1:9000; 
  9.             fastcgi_index  index.php; 
  10.             fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name; 
  11.             include        fastcgi_params; 
  12.         } 
  13. //注:黑體www爲web根目錄,改成對應目錄即可 

location 定義文件類型, \.php$ 代表所有以 php 作爲文件後綴的文件類型.
root 定義 php 文件存放的路徑, 當前以 "/www" 作爲默認存放位置.
fastcgi_index 定義 php 文件類型中的默認索引頁
fastcgi_param SCRIPT_FILENAME 定義了頁面請求參數, 如客戶端需要訪問 /t1.php 則會自動讀取 /www/t1.php文件, 如客戶端訪問 / 則自動讀取 /www/index.php 文件
include 定義fastcgi 配置信息將會被保存到 /usr/local/nginx/conf/fastcgi_params 文件中

nginx最常用的方法是利用 tcp/ip 協議連接 phpfastcgi 接口, 因此要連接php必須先啓動fastcgi程序.

啓動方法:

# /usr/local/bin/php-cgi-b 127.0.0.1:9000 -c /usr/local/lib/php.ini &

-b 用於指定監聽地址與端口
如果想指定配置文件位置,可以使用-c選項

注意, nginx 服務器負責所有的客戶端請求, 包括了靜態網頁解析 (html), 頁面中的其他對象如 ccs文件jpg png文件等傳輸, 但遇到客戶需要請求 php 頁面請求或 php 源碼解析時, nginx將會把頁面傳遞到fastcgi接口, 由 php-cgi 程序進行解析.

瀏覽器測試:http://IP/index.php

        當前php-cgi只啓用一個進程應答nginx所有連接中的php請求, 假如nginx具有一定的併發連接,那麼php-cgi 將會變得無法同時應付大量的工作, 並且返回網頁臨時不可用信息. 將會導致所有php連接無法返回數據結果,並返回錯誤信息。

        爲有效地解決php-cgi接口無法應答大量併發連接請求, 我們可以利用 spawn-fcgi或者php-fpm,稍後送上。

 

參考:terry《性能調優和安全》一書

      南非螞蟻《高性能Linux服務器構建實戰》Nginx章節

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