phpfpm和nginx如何通信

phpfpm和nginx如何通信

FastCGI原理

FastCGI是一個(gè)運(yùn)用于httpServer和動(dòng)態(tài)腳本語言間通信的接口,多數(shù)流行的Http Server都支持FastCGI,包括apachenginx和lighttpd等。同時(shí),F(xiàn)astCGI也被許多腳本語言支持,其中就有php。? ? ? ? ? ? ? ? ? ? (推薦學(xué)習(xí):nginx教程

FastCGI接口方式采用C/S結(jié)構(gòu),可以將HttP服務(wù)器和腳本解析服務(wù)器分開,同時(shí)在腳本解析服務(wù)器上啟動(dòng)一個(gè)或者多個(gè)腳本解析守護(hù)進(jìn)程。

當(dāng)HttP服務(wù)器每次遇到動(dòng)態(tài)程序時(shí),可以將其直接交付給FastCGI進(jìn)程來執(zhí)行,然后將得到的結(jié)果返回給客戶端。這種方式可以讓HttP服務(wù)器專一地處理靜態(tài)請(qǐng)求或者將動(dòng)態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,這在很大程度上提高了整個(gè)應(yīng)用系統(tǒng)的性能。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

Nginx+php-fpm實(shí)現(xiàn)原理

Nginx本身不會(huì)對(duì)PHP進(jìn)行解析,終端對(duì)PHP頁面的請(qǐng)求將會(huì)被Nginx交給FastCGI進(jìn)程監(jiān)聽的IP地址及端口,由php-fpm作為動(dòng)態(tài)解析服務(wù)器處理,最后將處理結(jié)果再返回給nginx

其實(shí),Nginx就是一個(gè)反向代理服務(wù)器。Nginx通過反向代理功能將動(dòng)態(tài)請(qǐng)求轉(zhuǎn)向后端php-fpm,從而實(shí)現(xiàn)對(duì)PHP的解析支持,這就是Nginx實(shí)現(xiàn)PHP動(dòng)態(tài)解析的原理。

Nginx不支持對(duì)外部程序的直接調(diào)用或者解析,所有的外部程序(包括PHP)必須通過FastCGI接口來調(diào)用。

FastCGI接口在linux下是socket(這個(gè)socket可以是文件socket,也可以是ip socket)。為了調(diào)用CGI程序,還需要一個(gè)FastCGI的wrapper(wrapper可以理解為用于啟動(dòng)另一個(gè)程序的程序),這個(gè)wrapper綁定在某個(gè)固定socket上,如端口或者文件socket。

當(dāng)Nginx將CGI請(qǐng)求發(fā)送給這個(gè)socket的時(shí)候,通過FastCGI接口,wrapper接收到請(qǐng)求,然后派生出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù);接著,wrapper再將返回的數(shù)據(jù)通過FastCGI接口,沿著固定的socket傳遞給Nginx;最后,Nginx將返回的數(shù)據(jù)發(fā)送給客戶端。

以上就是phpfpm和

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享