Fast-cgi cgi nginx php-fpm 的關系 (轉


Fast-cgi  cgi  nginx  PHP-fpm 的關系

Fast-cgi是由cgi發展而來,是http服務器(http,nginx等)和動態腳本語言(php,perl等)之間的的通信接口,只是一個接口而已,他以socket的形式存在(可以是文件socket,也可以是ip socket),可以將http服務器和動態腳本解析服務器分離(二者可以部署在不同的服務器上),讓http服務器專一處理靜態請求和轉發動態請求到腳本解析服務器;腳本解析服務器則專一處理動態腳本的請求。

 

Php-fpm:是一個fastcgi進程管理器,也是一個腳本解析服務器

 

借由一個nginx處理一個php請求來解釋幾者之間的關系

                                                                                                               

 

 

1.nginx服務器啟動時自動載入fastcgi進程管理器

2.Fastcgi進程管理器(php-fpm)自身初始化,並且啟動多個cgi解釋進程(php-cgi)並等待來自nginx的連接

3.當nginx服務器收到需要解析php的時,將請求轉發到fastcgi接口(socket),fastcgi進程管理器收到請求后選擇並連接一個cgi解釋器,nginx服務器將cgi環境變量和標准輸入發送給cgi解釋器(也就是php-cgi)

4.FastCGI 子進程(php-cgi)完成處理后將標准輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時, 請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 

 

以上是fastcgi處理請求的過程,那么cgi呢

上面說了,cgi只是http服務器與動態腳本語言之間的一個通信端口而已,當他收到來自http服務器的處理請求時,啟動腳本解析器來解析。他有很大的缺點,在每次收到來自http服務器的請求時,都要重新啟動腳本解析服務器來執行解析(重新加載各種環境變量,配置等等),解析結束后就退出,周而復始,效率十分的低,而fast-cgi相當於是一個常駐與內存當中的cgi在很大程度上提高了服務器的性能

 

PS:補充一點tomcat

我們都知到tomccat其實是一個servelt,它其實也是一個腳本解析服務器,主要解析Java程序,不同於php-frm,它采用的是多線程的方式來處理請求,相對而言效率更高且更少的占用系統資源

 

這是本人結合網絡上的文章和書上的講解做的一個總結,有不足之處希望大家指正,大家一起學習哈!

 

關聯文章:http://www.cnblogs.com/wanghetao/p/3934350.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM