簡單粗暴版本:
cgi(公共閘道器介面)
||
根據nginx配置檔案,知道不是靜態檔案 需要去找PHP解析器來處理
||
帶著URl,POST的資料、HTTP Header 以及查詢字串
||
會啟動對應的CGI程式,這裡就是PHP的解析器
||
PHP解析器會解析php.ini檔案,初始化執行環境
||
處理請求,再以規定CGI規定的格式返回處理後的結果,退出程式
||
web server再把結果返回給瀏覽器
好了,CGI是個協議
Fastcgi是用來提高CGI程式效能的。
PHP解析器會解析php.ini檔案,初始化執行環境
準的CGI對每個請求都會執行這些步驟 太累了對吧 而且處理每個時間的時間會比較長
首先,Fastcgi會先啟一個master,解析配置檔案,初始化執行環境,然後再啟動多個worker。當請求過來時,master會傳遞給一個worker,然後立即可以接受下一個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閒worker太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是fastcgi的對程式的管理。
那PHP-FPM又是什麼呢?是一個實現了Fastcgi的程式,被PHP官方收了。
大家都知道,PHP的直譯器是php-cgi。php-cgi只是個CGI程式,他自己本身只能解析請求,返回結果,不會程式管理 所以就出現了一些能夠排程php-cgi程式的程式。