要說 nginx 與 php 是如何協同工作的,首先得說 cgi (common gateway inte***ce) 和 fastcgi 這兩個協議。
cgi 是 web server 與後台語言互動的協議,有了這個協議,開發者可以使用任何語言處理 web server 發來的請求,動態的生成內容。但 cgi 有乙個致命的缺點,那就是每處理乙個請求都需要 fork 乙個全新的程序,隨著 web 的興起,高併發越來越成為常態,這樣低效的方式明顯不能滿足需求。就這樣,fastcgi 誕生了,cgi 很快就退出了歷史的舞台。fastcgi,顧名思義為更快的 cgi,它允許在乙個程序內處理多個請求,而不是乙個請求處理完畢就直接結束程序,效能上有了很大的提高。
至於 fpm (fastcgi process manager),它是 fastcgi 的實現,任何實現了 fastcgi 協議的 web server 都能夠與之通訊。
fpm 是乙個 php 程序管理器,包含 master 程序和 worker 程序兩種程序:master 程序只有乙個,負責監聽埠,接收來自 web server 的請求,而 worker 程序則一般有多個 (具體數量根據實際需要配置),每個程序內部都嵌入了乙個 php 直譯器,是 php **真正執行的地方
從 fpm 接收到請求,到處理完畢,其具體的流程如下:
1、fpm 的 master 程序接收到請求
2、master 程序根據配置指派特定的 worker 程序進行請求處理,如果沒有可用程序,返回錯誤,這也是我們配合 nginx 遇到502錯誤比較多的原因。
3、worker 程序處理請求,如果超時,返回504錯誤
4、請求處理結束,返回結果
fpm 從接收到處理請求的流程就是這樣了,那麼 nginx 又是如何傳送請求給 fpm 的呢?這就需要從 nginx 層面來說明了。
我們知道,nginx 不僅僅是乙個 web 伺服器,也是乙個功能強大的 proxy 伺服器,除了進行 http 請求的**,也可以進行許多其他協議請求的**,包括本文與 fpm 相關的 fastcgi 協議。為了能夠使 nginx 理解 fastcgi 協議,nginx 提供了 fastcgi 模組來將 http 請求對映為對應的 fastcgi 請求。
nginx 的 fastcgi 模組提供了 fastcgi_param 指令來主要處理這些對映關係,其主要完成的工作是將 nginx 中的變數翻譯成 php 中能夠理解的變數。
除此之外,非常重要的就是 fastcgi_pass 指令了,這個指令用於指定 fpm 程序監聽的位址,nginx 會把所有的 php 請求翻譯成 fastcgi 請求之後再傳送到這個位址。
Nginx 與 FPM 的工作機制
fpm 是乙個 php 程序管理器,包含 master 程序和 worker 程序兩種程序 master 程序只有乙個,負責監聽埠,接收來自 web server 的請求,而 worker 程序則一般有多個 具體數量根據實際需要配置 每個程序內部都嵌入了乙個 php 直譯器,是 php 真正執行的地...
nginx大概工作機制
1.master和worker nginx啟動後,會有2種程序 worker和master worker可能有多個 master程序負責管理分配任務,worker程序負責實際工作 worker工作機制 當客戶端傳送乙個請求後,master接收請求,然後後分配給worker 分配的機制為爭搶 work...
Kafka高階 工作機制與檔案儲存機制
producer向topic leader分類推送資料,每乙個佇列的主題都不同。topic leader向topic follower實時備份資料,防止topic leader突然掛掉。consumer消費topic leader中的資料,以offset為標誌,表示消費到的位置,以便出錯恢復時,從上...