FastCGI原理
#FastCGI是一個運送到HttpServer和動態腳本語言間通訊的接口,多數流行的Http Server都支援FastCGI,包括Apache、Nginx和lighttpd等。同時,FastCGI也被許多腳本語言支持,其中就有PHP。 (建議學習:nginx教學)
FastCGI介面方式採用C/S結構,可以將HttP伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或多個腳本解析守護程式。
當HttP伺服器每次遇到動態程式時,可以直接交付給FastCGI進程來執行,然後將得到的結果傳回給客戶端。這種方式可以讓HttP伺服器專一地處理靜態請求或將動態腳本伺服器的結果傳回給客戶端,這在很大程度上提高了整個應用系統的效能。
Nginx php-fpm實作原理
Nginx本身不會對PHP進行解析,終端機對PHP頁面的請求將會被Nginx交給FastCGI進程監聽的IP位址及端口,由php-fpm作為動態解析伺服器處理,最後將處理結果再傳回給nginx。
其實,Nginx就是一個反向代理伺服器。 Nginx透過反向代理功能將動態請求轉向後端php-fpm,從而實現對PHP的解析支持,這就是Nginx實現PHP動態解析的原理。
Nginx不支援對外部程式的直接呼叫或解析,所有的外部程式(包括PHP)必須透過FastCGI介面來呼叫。
FastCGI介面在Linux下是socket(這個socket可以是檔案socket,也可以是ip socket)。為了呼叫CGI程序,還需要一個FastCGI的wrapper(wrapper可以理解為用於啟動另一個程式的程式),這個wrapper綁定在某個固定socket上,例如連接埠或檔案socket。
當Nginx將CGI請求發送給這個socket的時候,透過FastCGI接口,wrapper接收到請求,然後派生出一個新的線程,這個線程調用解釋器或者外部程式處理腳本並讀取返回數據;接著,wrapper再將返回的資料通過FastCGI接口,沿著固定的socket傳遞給Nginx;最後,Nginx將返回的資料傳送給客戶端。
以上是phpfpm和nginx如何通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!