Fast-cgi cgi nginx PHP-fpm 的關係php
Fast-cgi是由cgi發展而來,是http服務器(http,nginx等)和動態腳本語言(php,perl等)之間的的通訊接口,只是一個接口而已,他以socket的形式存在(能夠是文件socket,也能夠是ip socket),能夠將http服務器和動態腳本解析服務器分離(兩者能夠部署在不一樣的服務器上),讓http服務器專注處理靜態請求和轉發動態請求到腳本解析服務器;腳本解析服務器則專注處理動態腳本的請求。html
Php-fpm:是一個fastcgi進程管理器,也是一個腳本解析服務器java
藉由一個nginx處理一個php請求來解釋幾者之間的關係nginx
1.nginx服務器啓動時自動載入fastcgi進程管理器tomcat
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呢socket
上面說了,cgi只是http服務器與動態腳本語言之間的一個通訊端口而已,當他收到來自http服務器的處理請求時,啓動腳本解析器來解析。他有很大的缺點,在每次收到來自http服務器的請求時,都要從新啓動腳本解析服務器來執行解析(從新加載各類環境變量,配置等等),解析結束後就退出,周而復始,效率十分的低,而fast-cgi至關因而一個常駐與內存當中的cgi在很大程度上提升了服務器的性能php-fpm
PS:補充一點tomcat
咱們都知到tomccat實際上是一個servelt,它其實也是一個腳本解析服務器,主要解析Java程序,不一樣於php-frm,它採用的是多線程的方式來處理請求,相對而言效率更高且更少的佔用系統資源
這是本人結合網絡上的文章和書上的講解作的一個總結,有不足之處但願你們指正,你們一塊兒學習哈!
關聯文章:http://www.cnblogs.com/wanghetao/p/3934350.html