phpfpm和nginx如何通信

phpfpm和nginx如何通信

FastCGI原理

FastCGI是一個運用于httpServer和動態腳本語言間通信的接口,多數流行的Http Server都支持FastCGI,包括apachenginx和lighttpd等。同時,FastCGI也被許多腳本語言支持,其中就有php。? ? ? ? ? ? ? ? ? ? (推薦學習:nginx教程

FastCGI接口方式采用C/S結構,可以將HttP服務器和腳本解析服務器分開,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。

當HttP服務器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然后將得到的結果返回給客戶端。這種方式可以讓HttP服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。

立即學習PHP免費學習筆記(深入)”;

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和

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享