fastcgi與phpfpm
1. 如何通俗地解釋cgi、fastcgi、php-fpm之間的關系
在解釋CGI、FastCGI、PHP-FPM之間的關系時,我們需要首先了解HTTP/Web伺服器,FastCGI以及PHP-FPM各自的定位和作用。
CGI(Common Gateway Interface)是一個標准,它規定了Web伺服器與程序之間交互的協議,使得程序可以以標准格式接收和返回數據。CGI主要用於處理動態內容,它允許Web伺服器將請求發送給外部腳本進行處理,然後將結果返回給瀏覽器。
FastCGI是對CGI的改進,它提供了一種更高效的方式來處理動態內容。FastCGI允許Web伺服器與CGI程序建立持久連接,而不是每次請求時都創建新進程。這大大提高了性能,減少了啟動和停止進程的時間開銷。
當Web伺服器接收到請求時,如請求/index.php,它會將請求傳遞給PHP解析器處理。在這個過程中,CGI協議規定了數據的傳輸格式。PHP解析器讀取並解析請求,處理腳本,生成HTML結果,然後返回給Web伺服器。Web伺服器再將結果發送給瀏覽器。
CGI的性能瓶頸在於每次請求都需要啟動一個新進程,這涉及到解析php.ini文件、初始化執行環境等步驟,每次啟動和停止進程都會消耗資源。而FastCGI解決了這個問題,它通過先啟動一個master進程來解析配置文件和初始化執行環境。當接收到請求時,master將請求傳遞給一個worker進程處理,然後立即接受下一個請求,避免了重復啟動進程的開銷。
PHP-FPM(FastCGI Process Manager)是一個實現FastCGI協議的程序,專門用來管理FastCGI起的進程。它負責調度PHP-cgi進程,提高性能並優化資源使用。PHP-FPM已經在PHP內核中集成,通過編譯參數--enable-fpm啟用。修改配置文件後,需要重啟PHP-FPM以應用更改,新fork的worker將使用新的配置,而當前的worker將繼續處理現有請求。
2. 關於FastCGI、php-cgi、php-fpm的區別是什麼,各自有什麼用途,以及相互間的關系是什麼
fastcgi是一個通用網關介面,用於web伺服器(iis, apache)和應用程序通信。
php-cgi是php平台的cgi程序
以上兩個結合,可以使php整合在web服務中
php-fpm是一個獨立的php-fcgi管理軟體,它要整合進web服務中,需要使用代理模式
一般與nginx搭配。也可以與apache搭配
php-fpm一般不直接作為服務容器提供外網訪問,而是通過常用web容器作代理
php作為伺服器端的解析程序,運行模式分很多種,fastcgi, mod_php, proxy(代理)等。
與iis搭配時一般採用fast-cgi模式,iis自帶fast-cgi引擎,配置好php參數即可
與apache搭配,在windows平台下,一般也是fast-cgi模式,在linux系統中一般是mod_php模式,把php作為一個子模塊載入
也可以配置php-fpm 然後在apache中配置代理模式
與nginx搭配,一般就是用php-fpm+代理模式了
