深入理解PHP之:Nginx 與 FPM 的工作機(jī)制

網(wǎng)絡(luò)上有很多關(guān)于如何配置 Nginx + FPM 的文章,但它們更多從操作的角度出發(fā),告訴我們?cè)趺醋?,但卻沒(méi)有告訴我們?yōu)槭裁匆@么做,本文從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。

要說(shuō) Nginx 與 PHP 是如何協(xié)同工作的,首先得說(shuō) CGI (Common Gateway Interface) 和 FastCGI 這兩個(gè)協(xié)議。

CGI 是 Web Server 與后臺(tái)語(yǔ)言交互的協(xié)議,有了這個(gè)協(xié)議,開(kāi)發(fā)者可以使用任何語(yǔ)言處理 Web Server 發(fā)來(lái)的請(qǐng)求,動(dòng)態(tài)的生成內(nèi)容。但 CGI 有一個(gè)致命的缺點(diǎn),那就是每處理一個(gè)請(qǐng)求都需要 fork 一個(gè)全新的進(jìn)程,隨著 Web 的興起,高并發(fā)越來(lái)越成為常態(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)功能,具體可以參考官方文檔:PHP: FPM Installation

FPM 是一個(gè) PHP 進(jìn)程管理器,包含 master 進(jìn)程和 worker 進(jìn)程兩種進(jìn)程:master 進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽(tīng)端口,接收來(lái)自 Web Server 的請(qǐng)求,而 worker 進(jìn)程則一般有多個(gè) (具體數(shù)量根據(jù)實(shí)際需要配置),每個(gè)進(jìn)程內(nèi)部都嵌入了一個(gè) PHP 解釋器,是 PHP 代碼真正執(zhí)行的地方

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容