1. 程式人生 > >cgi、fastcgi、php-cgi、php-fpm的關係

cgi、fastcgi、php-cgi、php-fpm的關係

1. CGI

CGI全稱是“公共閘道器介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。

CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。

伺服器接收到請求後,如果是index.html這樣的靜態檔案,可以直接去相應的目錄找到這個檔案,然後返回給客戶端,但是當傳送的請求是index.php這樣請求,顯然這個是需要解析的,此時就需要伺服器將這個請求傳遞給cgi程式解析,解析完成後返回結果。但是要傳遞什麼內容呢,這個就是cgi來規定的。

2. Fastcgi

Fastcgi是用來提高CGI程式效能的,是CGI的升級版,一種語言無關的協議

伺服器每次將請求傳遞給cig程式解析的時候都會解析配置檔案,比如php.ini,想想就知道這回影響效能,fastcgi會先啟動一個master解析配置檔案,初始化環境,然後再啟動多個worker,當請求過來的時候master會傳遞給woker,然後立即去接受下一個請求。當worker不夠用的時候會增加,當空閒的worker多的時候會停掉一些,這樣的機制可以提高效能,節省資源。

3. php-cgi

  • PHP-CGI是php自帶的Fast-CGI管理器.
  • php.ini修改之後,必須kill掉php-cgi再啟動php.ini 才生效。不可以平滑的重啟
  • 記憶體不能動態分配
  • 啟動php,指定啟動的worker ,長期駐留在記憶體裡 ,使用者訪問php檔案, php-cgi 處理請求,返回結果

4. Php-fmp

  • 非官方fastCgi程序管理器,後來php5.4開始,被官方收錄了
  • 可以平滑重啟php
  • 動態排程程序
  • 啟動php,動態指定啟動的worker ,長期駐留在記憶體裡 ,根據來訪壓力動態增減worker的程序數量,使用者訪問php檔案, php-fpm 處理請求,返回結果

php-cgi和php-fpm的關係呢?

php54是之前是一種關係,php54之後另一種關係。php54之前,php-fpm(第三方編譯)是管理器,php-cgi是直譯器。php54之後,php-fpm(官方自帶),master 與 pool 模式。php-fpm 和 php-cgi 沒有關係了。php-fpm又是直譯器,又是管理器網上大部分說法:php-fpm 是管理php-cgi 的,是針對php54之前的

參考資料

https://www.awaimai.com/371.html

https://segmentfault.com/q/1010000000256516

http://cuishan.win/2017/02/05/cgi-fastcgi-php-cgi-php-fpm/

https://www.zhihu.com/question/55835080