1. 程式人生 > >FastCGI特點原理、nginx與php-fpm兩種通訊方式對比

FastCGI特點原理、nginx與php-fpm兩種通訊方式對比

一、FastCGI特點:

1、HTTP伺服器和動態指令碼語言間通訊的介面或工具

2、可把動態語言解析和HTTP伺服器分離I

3、Nginx、Apache、Lighttpd,以及多數動態語言 都支援FastCGI

4、FastCGI介面方式採用 C/S結構,分為客戶端(HTTP伺服器)和伺服器端(動態語言解析伺服器)

5、PHP動態語言伺服器可以啟動多個FastCGI的守護程序(例如php-fpm(fcgi process mangement))

6、HTTP伺服器通過 FastCGI客戶端(Nginx fastcgi_pass)和 動態語言FastCGI伺服器(php-fpm) 通訊

二、FastCGI原理:

FastCGI介面在Linux下是socket。wrapper 用於啟動另一個程式,繫結在某個固定的socket上,如埠或檔案socket。呼叫CGI程式

1、Nginx將CGI請求傳送給繫結有wrapper的socket時,通過FastCGI介面,wrapper接收到請求,然後派生出一個新的執行緒,這個執行緒呼叫直譯器 或者 外部程式 處理指令碼 來讀取返回的資料。

2、wrapper再將返回的資料通過FastCGI介面,沿著固定的socket傳給Nginx

3、Nginx將返回的資料傳送給客戶端n 

三、nginx與php-fpm兩種通訊方式

    unix socket方式要比tcp的方式快,而且消耗資源少,因為socket之間在nginx和php-fpm的程序之間通訊,而tcp需要經過本地迴環驅動,還要申請臨時埠和tcp相關資源。

    unix socket會顯得不是那麼穩定,當併發連線數爆發時,會產生大量的長時快取,在沒有面向連線協議支撐的情況下,大資料包很有可能就直接出錯並不會返回異常。而TCP這樣的面向連線的協議,多少可以保證通訊的正確性和完整性。

1、tcp方式

#PHP 指令碼請求全部轉發到 FastCGI處理. 使用FastCGI預設配置.  location ~ \.php$ {       root /root;       fastcgi_pass 127.0.0.1:9000;       fastcgi_index index.php;       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       include fastcgi_params; }

location ~ \.php$ {       root /root;       fastcgi_pass 127.0.0.1:9000;       fastcgi_index index.php;       include fastcgi.conf; }  tips:diff  fastcgi.conf  fastcgi_params        fastcgi.conf多了一行fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

2、unix socket方式

location ~ \.php$ { # fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

# # With php5-cgi alone:     # fastcgi_pass 127.0.0.1:9000;        fastcgi_pass unix:/var/run/php5-fpm.sock;        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/www/nginx-default$fastcgi_script_name; # # With php5-fpm:     # fastcgi_pass unix:/var/run/php5-fpm.sock;        fastcgi_index index.php;        include fastcgi_params; }

tips:修改nginx配置檔案location ~ \.php$ 區段之後,記得修改/etc/php5/fpm/pool.d/www.conf 的  listen = 127.0.0.1:9000  或者 listen = unix:/var/run/php5-fpm.sock

參考文件: