可能不少人弄不清楚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主要作用是做請求的轉發。

簡單來說,當你用瀏覽器訪問一個網站時,瀏覽器將請求發送給網站伺服器,通常這裡的伺服器就表示像nginx類似的web伺服器,(這裡暫不考慮負載均衡之類的前端請求控制)。

它的主要作用是將請求轉發給後端的服務,這裡的服務通常是指PHP類似的腳本執行器。

PHP的主要作用就是將請求執行,取出需要的數據返給nginx,再由nginx發送給瀏覽器,展示給用戶。

理解了這裡的關係,就明白了,怎麼部署對業務場景最有利。

正常生產環境下,為了提高訪問速度和並發,nginx和PHP都在各自的集羣裡面,執行著各自的任務和職責,互不幹擾。


推薦閱讀:
相關文章