PHP知識筆記:CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI區別

uiz發表於2018-09-29

原作者連結:https://www.aicyun.com/article/34

原理

nginx只是 web 中的內容分發者,比如,如果請求/index.html,那麼web server會去檔案系統中找到這個檔案,傳送給瀏覽器,這裡分發的是靜態資料。好了,如果現在請求的是/index.php,根據配置檔案,nginx知道這個不是靜態檔案,需要去找PHP解析器來處理,那麼他會把這個請求簡單處理後交給PHP解析器。即啟動對應的CGI程式,PHP解析器會解析php.ini檔案,初始化一個環境程式,然後處理請求,在以規定CGI規定的格式返回處理後的結果,退出程式,nginx 在把結果返回給瀏覽器.

CGI

CGI是公共閘道器介面(common gateway interface);http 伺服器與你的或者其他機器上的程式進行交談的一種工具,程式需執行在網路伺服器上
CGI可以用於任何語言,只有這種語言具有標準的輸入,輸出和環境變數.
CGI是個協議.

FastCGI

Fastcgi是用來提高CGI程式效能的,CGI程式的效能出在CGI對每個請求都會執行解析php.ini初始化執行環境這些步驟,每次請求都啟動一個程式,假如有幾千萬請求那就完了.
Fastcgi會先啟動一個master,專門解析配置,初始化環境,在啟動多個worker程式,請求來了,master會傳遞給一個worker,然後繼續等待下一個請求,這就避免了重複的解析和初始化,效率提升不少.假如worker程式不夠,master主程式會多啟動幾個 worker,如果空閒了,master 會主動停止一些 worker.這節省了大量的資源

PHP-CGI

PHP-CGI是PHP自帶的FastCGI管理器
弊端:

  • php-cgi假如改了配置檔案需要重啟php-cgi,不能做到平滑重啟
  • 直接殺死php-cgi程式,php 就不能執行了

PHP-FPM

PHP-FPM是一個PHP FastCGI管理器,準確的說是管理的 php-cgi,fastcgi是一種協議,和程式無關.php-fpm在修改php.ini後不像php-cgi不能平滑重啟.php-fpm會讓新的worker用新的配置,已經存在的 worker 處理完了就停止了.

php-cgi只是解釋PHP指令碼的程式而已

Spawn-FCGI

通用的FastCGI管理伺服器,lighttpd的一部分.最新的lighttpd也沒有包含這一塊,不建議使用.


相關文章