摘要:要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。是與后臺(tái)語(yǔ)言交互的協(xié)議,有了這個(gè)協(xié)議,開發(fā)者可以使用任何語(yǔ)言處理發(fā)來的請(qǐng)求,動(dòng)態(tài)的生成內(nèi)容。為了能夠使理解協(xié)議,提供了模塊來將請(qǐng)求映射為對(duì)應(yīng)的請(qǐng)求。如此以來,與通信的整個(gè)流程應(yīng)該比較清晰了吧。
【原文地址】https://zhuanlan.zhihu.com/p/...
網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。
要說 Nginx 與 PHP 是如何協(xié)同工作的,首先得說 CGI (Common Gateway Interface) 和 FastCGI 這兩個(gè)協(xié)議。
CGI 是 Web Server 與后臺(tái)語(yǔ)言交互的協(xié)議,有了這個(gè)協(xié)議,開發(fā)者可以使用任何語(yǔ)言處理 Web Server 發(fā)來的請(qǐng)求,動(dòng)態(tài)的生成內(nèi)容。但 CGI 有一個(gè)致命的缺點(diǎn),那就是每處理一個(gè)請(qǐng)求都需要 fork 一個(gè)全新的進(jìn)程,隨著 Web 的興起,高并發(fā)越來越成為常態(tài),這樣低效的方式明顯不能滿足需求。就這樣,F(xiàn)astCGI 誕生了,CGI 很快就退出了歷史的舞臺(tái)。FastCGI,顧名思義為更快的 CGI,它允許在一個(gè)進(jìn)程內(nèi)處理多個(gè)請(qǐng)求,而不是一個(gè)請(qǐng)求處理完畢就直接結(jié)束進(jìn)程,性能上有了很大的提高。
至于 FPM (FastCGI Process Manager),它是 FastCGI 的實(shí)現(xiàn),任何實(shí)現(xiàn)了 FastCGI 協(xié)議的 Web Server 都能夠與之通信。FPM 之于標(biāo)準(zhǔn)的 FastCGI,也提供了一些增強(qiáng)功能,具體可以參考官方文檔:http://php.net/manual/en/inst...
FPM 是一個(gè) PHP 進(jìn)程管理器,包含 master 進(jìn)程和 worker 進(jìn)程兩種進(jìn)程:master 進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽端口,接收來自 Web Server 的請(qǐng)求,而 worker 進(jìn)程則一般有多個(gè) (具體數(shù)量根據(jù)實(shí)際需要配置),每個(gè)進(jìn)程內(nèi)部都嵌入了一個(gè) PHP 解釋器,是 PHP 代碼真正執(zhí)行的地方,下圖是我本機(jī)上 fpm 的進(jìn)程情況,1一個(gè) master 進(jìn)程,3個(gè) worker 進(jìn)程:
從 FPM 接收到請(qǐng)求,到處理完畢,其具體的流程如下:
FPM 的 master 進(jìn)程接收到請(qǐng)求
master 進(jìn)程根據(jù)配置指派特定的 worker 進(jìn)程進(jìn)行請(qǐng)求處理,如果沒有可用進(jìn)程,返回錯(cuò)誤,這也是我們配合 Nginx
遇到502錯(cuò)誤比較多的原因。
worker 進(jìn)程處理請(qǐng)求,如果超時(shí),返回504錯(cuò)誤
請(qǐng)求處理結(jié)束,返回結(jié)果
FPM 從接收到處理請(qǐng)求的流程就是這樣了,那么 Nginx 又是如何發(fā)送請(qǐng)求給 fpm 的呢?這就需要從 Nginx 層面來說明了。
我們知道,Nginx 不僅僅是一個(gè) Web 服務(wù)器,也是一個(gè)功能強(qiáng)大的 Proxy 服務(wù)器,除了進(jìn)行 http 請(qǐng)求的代理,也可以進(jìn)行許多其他協(xié)議請(qǐng)求的代理,包括本文與 fpm 相關(guān)的 fastcgi 協(xié)議。為了能夠使 Nginx 理解 fastcgi 協(xié)議,Nginx 提供了 fastcgi 模塊來將 http 請(qǐng)求映射為對(duì)應(yīng)的 fastcgi 請(qǐng)求。
Nginx 的 fastcgi 模塊提供了 fastcgi_param 指令來主要處理這些映射關(guān)系,下面 Ubuntu 下 Nginx 的一個(gè)配置文件,其主要完成的工作是將 Nginx 中的變量翻譯成 PHP 中能夠理解的變量。
除此之外,非常重要的就是 fastcgi_pass 指令了,這個(gè)指令用于指定 fpm 進(jìn)程監(jiān)聽的地址,Nginx 會(huì)把所有的 php 請(qǐng)求翻譯成 fastcgi 請(qǐng)求之后再發(fā)送到這個(gè)地址。下面一個(gè)簡(jiǎn)單的可以工作的 Nginx 配置文件:
在這個(gè)配置文件中,我們新建了一個(gè)虛擬主機(jī),監(jiān)聽在 80 端口,Web 根目錄為 /home/rf/projects/wordpress。然后我們通過 location 指令,將所有的以 .php 結(jié)尾的請(qǐng)求都交給 fastcgi 模塊處理,從而把所有的 php 請(qǐng)求都交給了 fpm 處理,從而完成 Nginx 到 fpm 的閉環(huán)。
如此以來,Nginx 與 FPM 通信的整個(gè)流程應(yīng)該比較清晰了吧。
以上
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22890.html
摘要:要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。是與后臺(tái)語(yǔ)言交互的協(xié)議,有了這個(gè)協(xié)議,開發(fā)者可以使用任何語(yǔ)言處理發(fā)來的請(qǐng)求,動(dòng)態(tài)的生成內(nèi)容。為了能夠使理解協(xié)議,提供了模塊來將請(qǐng)求映射為對(duì)應(yīng)的請(qǐng)求。如此以來,與通信的整個(gè)流程應(yīng)該比較清晰了吧。 【原文地址】https://zhuanlan.zhihu.com/p/... 網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從...
摘要:要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。之于標(biāo)準(zhǔn)的,也提供了一些增強(qiáng)功能,具體可以參考官方文檔。為了能夠使理解協(xié)議,提供了模塊來將請(qǐng)求映射為對(duì)應(yīng)的請(qǐng)求。 網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx...
摘要:要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。之于標(biāo)準(zhǔn)的,也提供了一些增強(qiáng)功能,具體可以參考官方文檔。為了能夠使理解協(xié)議,提供了模塊來將請(qǐng)求映射為對(duì)應(yīng)的請(qǐng)求。 網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx...
摘要:網(wǎng)絡(luò)上有很多關(guān)于如何配置的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從與的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解與是如何協(xié)同工作的。要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。 網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從 Nginx ...
摘要:網(wǎng)絡(luò)上有很多關(guān)于如何配置的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從與的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解與是如何協(xié)同工作的。要說與是如何協(xié)同工作的,首先得說和這兩個(gè)協(xié)議。 網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋觯珔s沒有告訴我們?yōu)槭裁匆@么做,本文從 Nginx ...
閱讀 2675·2023-04-25 15:15
閱讀 1316·2021-11-25 09:43
閱讀 1604·2021-11-23 09:51
閱讀 1079·2021-11-12 10:36
閱讀 2880·2021-11-11 16:55
閱讀 955·2021-11-08 13:18
閱讀 723·2021-10-28 09:31
閱讀 2048·2019-08-30 15:47