回覆列表
-
1 # 喜歡產品的研發
-
2 # 網路圈
可能不少人弄不清楚PHP指令碼的執行到底是由誰來執行的,面試過不少四五年以上的PHP開發者有不少人也是分不清的。可能大家潛意識中覺得PHP是由Nginx來執行的,但這裡要說的是:Nginx是無法直接來解析執行PHP指令碼的!
PHP和Nginx的關係Nginx是一款HTTP和反向代理伺服器,預設情況下它只能支援HTML檔案的處理,對於動態指令碼它是不支援的。而PHP指令碼的解析執行靠的是PHP-FPM,Nginx將請求轉發給PHP-FPM去解析執行,得到結果後再返回Nginx,再由Nginx返回給客戶端。
如上所述,Nginx透過FastCGI或Socket來和PHP-FPM進行通訊的,如下圖示:
Nginx與PHP-FPM部署方式分析我們通常是將Nginx和PHP-FPM部署在同一臺伺服器上的,其實也可以將兩者部署在不同伺服器上,這裡就會有人問:是將兩者部署在同一臺伺服器上效率高還是部署在不同伺服器上效率更高呢?其實,這沒有絕對的定論。
1、Nginx與PHP-FPM集中式部署
這種看上去速度更快,其實也未必,因為我們將Nginx和PHP-FPM部署在一臺伺服器上是,一旦伺服器壓力較大時,Nginx和PHP-FPM可能都會不穩定!
2、Nginx和PHP-FPM分開部署在不同伺服器
這種方式雖說避免了應用服務間的相互影響,但也要考慮跨伺服器呼叫的效能影響(主要是網路開銷),而且最好是在同一個區域網間呼叫。
對於大型網際網路平臺,其實就是將Nginx和PHP-FPM分開部署的。
當然是分開的好了。
不聽明白你說的分開和合並具體是什麼意思,是指同一臺物理伺服器?LNMP軟體?還是另指什麼?
簡單來說,當你用瀏覽器訪問一個網站時,瀏覽器將請求傳送給網站伺服器,通常這裡的伺服器就表示像nginx類似的web伺服器,(這裡暫不考慮負載均衡之類的前端請求控制)。
PHP的主要作用就是將請求執行,取出需要的資料返給nginx,再由nginx傳送給瀏覽器,展示給使用者。
理解了這裡的關係,就明白了,怎麼部署對業務場景最有利。
正常生產環境下,為了提高訪問速度和併發,nginx和PHP都在各自的集群裡面,執行著各自的任務和職責,互不干擾。