Nginx 與 FPM 的工作機(jī)制

本文從Nginx與FPM的工作機(jī)制出發(fā),探討配置背后的原理扒腕,讓我們真正理解Nginx與PHP是如何協(xié)同工作的寞钥。要說Nginx與PHP是如何協(xié)同工作的蚁廓,首先得說CGI (Common Gateway Interface)和FastCGI這兩個協(xié)議雷激。

CGI是Web Server與后臺語言交互的協(xié)議替蔬,有了這個協(xié)議,開發(fā)者可以使用任何語言處理Web Server發(fā)來的請求屎暇,動態(tài)的生成內(nèi)容承桥。但CGI有一個致命的缺點(diǎn),那就是每處理一個請求都需要fork一個全新的進(jìn)程根悼,隨著Web的興起凶异,高并發(fā)越來越成為常態(tài),這樣低效的方式明顯不能滿足需求挤巡。就這樣剩彬,F(xiàn)astCGI誕生了,CGI很快就退出了歷史的舞臺矿卑。FastCGI喉恋,顧名思義為更快的CGI,它允許在一個進(jìn)程內(nèi)處理多個請求母廷,而不是一個請求處理完畢就直接結(jié)束進(jìn)程轻黑,性能上有了很大的提高。

至于FPM (FastCGI Process Manager)琴昆,它是FastCGI的實現(xiàn)苔悦,任何實現(xiàn)了FastCGI協(xié)議的Web Server都能夠與之通信。FPM之于標(biāo)準(zhǔn)的FastCGI椎咧,也提供了一些增強(qiáng)功能,具體可以參考官方文檔:PHP: FPM Installation把介。

FPM是一個PHP進(jìn)程管理器勤讽,包含master進(jìn)程和worker進(jìn)程兩種進(jìn)程:master進(jìn)程只有一個,負(fù)責(zé)監(jiān)聽端口拗踢,接收來自Web

Server的請求脚牍,而worker進(jìn)程則一般有多個(具體數(shù)量根據(jù)實際需要配置),每個進(jìn)程內(nèi)部都嵌入了一個PHP解釋器巢墅,是PHP代碼真正執(zhí)行的地方诸狭,下圖是我本機(jī)上fpm的進(jìn)程情況,1一個master進(jìn)程君纫,3個worker進(jìn)程:

從FPM接收到請求驯遇,到處理完畢,其具體的流程如下:

1.FPM的master進(jìn)程接收到請求

2.master進(jìn)程根據(jù)配置指派特定的worker進(jìn)程進(jìn)行請求處理蓄髓,如果沒有可用進(jìn)程叉庐,返回錯誤,這也是我們配合Nginx遇到502錯誤比較多的原因会喝。

3.worker進(jìn)程處理請求陡叠,如果超時玩郊,返回504錯誤

4.請求處理結(jié)束,返回結(jié)果

FPM從接收到處理請求的流程就是這樣了枉阵,那么Nginx又是如何發(fā)送請求給fpm的呢译红?這就需要從Nginx層面來說明了。

我們知道兴溜,Nginx不僅僅是一個Web服務(wù)器侦厚,也是一個功能強(qiáng)大的Proxy服務(wù)器,除了進(jìn)行http請求的代理昵慌,也可以進(jìn)行許多其他協(xié)議請求的代理假夺,包括本文與fpm相關(guān)的fastcgi協(xié)議。為了能夠使Nginx理解fastcgi協(xié)議斋攀,Nginx提供了fastcgi模塊來將http請求映射為對應(yīng)的fastcgi請求已卷。

Nginx的fastcgi模塊提供了fastcgi_param指令來主要處理這些映射關(guān)系,下面Ubuntu下Nginx的一個配置文件淳蔼,其主要完成的工作是將Nginx中的變量翻譯成PHP中能夠理解的變量侧蘸。

除此之外,非常重要的就是fastcgi_pass指令了鹉梨,這個指令用于指定fpm進(jìn)程監(jiān)聽的地址讳癌,Nginx會把所有的php請求翻譯成fastcgi請求之后再發(fā)送到這個地址。下面一個簡單的可以工作的Nginx配置文件:

在這個配置文件中存皂,我們新建了一個虛擬主機(jī)晌坤,監(jiān)聽在80端口,Web根目錄為/home/rf/projects/wordpress旦袋。然后我們通過location指令骤菠,將所有的以.php結(jié)尾的請求都交給fastcgi模塊處理,從而把所有的php請求都交給了fpm處理疤孕,從而完成Nginx到fpm的閉環(huán)商乎。

如此以來,Nginx與FPM通信的整個流程應(yīng)該比較清晰了吧祭阀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹉戚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子专控,更是在濱河造成了極大的恐慌抹凳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩官,死亡現(xiàn)場離奇詭異却桶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門颖系,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗅剖,“玉大人,你說我怎么就攤上這事嘁扼⌒帕福” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵趁啸,是天一觀的道長强缘。 經(jīng)常有香客問我,道長不傅,這世上最難降的妖魔是什么旅掂? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮访娶,結(jié)果婚禮上商虐,老公的妹妹穿的比我還像新娘。我一直安慰自己崖疤,他們只是感情好秘车,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劫哼,像睡著了一般叮趴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上权烧,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天眯亦,我揣著相機(jī)與錄音,去河邊找鬼般码。 笑死搔驼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侈询。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糯耍,長吁一口氣:“原來是場噩夢啊……” “哼扔字!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起温技,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤革为,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舵鳞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體震檩,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抛虏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片博其。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迂猴,靈堂內(nèi)的尸體忽然破棺而出慕淡,到底是詐尸還是另有隱情,我是刑警寧澤沸毁,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布峰髓,位于F島的核電站,受9級特大地震影響息尺,放射性物質(zhì)發(fā)生泄漏携兵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一搂誉、第九天 我趴在偏房一處隱蔽的房頂上張望徐紧。 院中可真熱鬧,春花似錦勒葱、人聲如沸浪汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽死遭。三九已至,卻和暖如春凯旋,著一層夾襖步出監(jiān)牢的瞬間呀潭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工至非, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钠署,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓荒椭,卻偏偏與公主長得像谐鼎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子趣惠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 著作權(quán)歸作者所有狸棍。 商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處味悄。 作者:仁風(fēng)H 鏈接:http://zhua...
    meng_philip123閱讀 205評論 0 4
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成草戈,其中,內(nèi)核的設(shè)計非常微小和簡潔侍瑟,完成的工作也非常簡單...
    rosekissyou閱讀 10,214評論 5 124
  • Nginx的工作原理 1.Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成唐片,其中丙猬,內(nèi)核的設(shè)計非常微小和簡潔,...
    架構(gòu)飛毛腿閱讀 6,022評論 1 27
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx费韭?那么一定聽過它的“同行”Apache吧茧球!Ngi...
    JokerW閱讀 32,672評論 24 1,002
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9