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