fastcgiphpfpm
1. php-FPM詳解
PHPFPM是PHP FastCGI進程管理器,專為管理PHP進程池設計,用於接收web伺服器請求。以下是關於PHPFPM的詳細解釋:
一、PHPFPM的誕生 PHPFPM的誕生源自PHPFastCGI的需求,是為了有效管理PHPFastCGI而出現的程序。
二、PHPFastCGI的作用 PHPFastCGI是一個解析PHP請求並返回結果的CGI程序,但它本身並不負責管理進程。
三、PHPCGI與PHPFastCGI的區別 在PHPFastCGI之前,存在PHPCGI,但由於其執行效率低下,最終被PHPFastCGI取代。
四、FastCGI與CGI的區別 CGI模式:每次請求時都需要讀取php.ini配置,初始化執行環境,耗時且重復。 FastCGI模式:允許一次啟動一個主進程,讀取一次配置,然後啟動多個工作進程。當請求來臨時,master將請求傳遞給worker,避免了重復的初始化工作,提高了效率。
五、PHPFPM的工作原理 PHPFPM創建一個主進程來控制何時以及如何將HTTP請求轉發給一個或多個子進程處理。 主進程還負責管理進程的創建與銷毀,以適應Web應用流量的變化。
六、PHPFPM的安裝與配置 安裝:PHP在5.3.3之後將PHPFPM整合到核心代碼中,無需單獨下載安裝。只需在編譯PHP源碼時添加enablefpm即可啟用PHPFPM支持。 全局配置:在CentOS中,PHPFPM的主配置文件為/etc/php7/phpfpm.conf,配置內容通常包括進程池定義。進程池定義文件通常使用www.conf作為默認配置文件,進行必要的編輯保存後,重啟PHPFPM主進程。 進程池詳細配置:請參考php.net/manual/install文檔。
七、實際應用 以nginx為例,可以配置nginx將請求轉發給PHPFPM進行處理。
以上是PHPFPM的詳細解釋,涵蓋了其誕生背景、作用、與CGI/PHPCGI的區別、工作原理、安裝與配置以及實際應用等方面。
2. 如何通俗地解釋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將繼續處理現有請求。
3. 關於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+代理模式了