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

原作者鏈接: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也沒有包含這一塊,不建議使用.

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