(1)Web Server啓動時載入FastCGI進程管理器(Apache Module或IIS ISAPI等)
(2)FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可建多個php-cgi),並等待來自Web Server的鏈接。
(3)當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
(4)FastCGI子進程完成處理後,將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。FastCGI子進程接着等待,並處理來自FastCGI進程管理器(運行在Web Server中)的下一個鏈接。 在CGI模式中,php-cgi在此便退出了
什麼是php-fpm?
fpm是FastCGI Process Manager的縮寫,那麼,fpm就是FastCGI進程管理器的簡稱。
php-fpm就是php中的FastCGI進程管理器。
對於php5.3以前的版原本說,php-fpm是一個第三方的補丁包,旨在將FastCGI進程管理整合進PHP包中。
在php5.3以後的版本中,php-fpm再也不是第三方的包,它已經被集成到php的源碼中了。php-fpm提供了更好的PHP進程管理方式,能夠有效控制內存和進程、能夠平滑重載PHP配置,比spawn-fcgi具備更多優勢,因此php-fpm被PHP官方收購了。
php-fpm的管理對象是php-cgi。但不能說php-fpm是fastcgi進程的管理器,由於前面說了fastcgi是個協議,彷佛沒有這麼個進程存在,就算存在php-fpm也管理不了他(至少目前是)。 有的說,php-fpm是php內核的一個補丁之前是對的。由於最開始的時候php-fpm沒有包含在PHP內核裏面,要使用這個功能,須要找到與源碼版本相同的php-fpm對內核打補丁,而後再編譯。後來PHP內核集成了PHP-FPM以後就方便多了,使用--enalbe-fpm
這個編譯參數便可。