Nginx 和 PHP 的兩種部署方式比較

2種部署方式簡介
第一種
    前置1臺nginx服務器做HTTP反向代理和負載均衡
    後面N太服務器的Nginx做Web服務,並調用php-fpm提供的fast cgi服務
    此種部署方式最爲常見,web服務和PHP服務在同一臺服務器上都有部署

第二種
    前置1臺nginx服務器做Web服務
    後面服務器只部署php-fpm服務,供nginx服務器調用
    前置1臺nginx服務器,在調用後面多例php-fpm服務時,也可以做到負載均衡

如下圖 :


對比
從系統設計角度
第一種部署是常規部署方式,大中小規模網站都能適用。
第二種,不同服務部署在不同服務器上,更加細緻。但也有幾個問題:
    前置nginx充當Web服務。對靜態資源的訪問、壓縮傳輸、緩存設置等,也都集中在這臺服務器上。壓力會大,容易成爲瓶頸。
    如果靜態資源都存放於CDN,不需要HTTP 壓縮傳輸,這種部署方式還算比較合理;
    承接上面兩點,還可以對這種部署方式進行優化。如前置nginx負載均衡和反向代理,中間是nginx Web服務,後面部署php-fpm服務。

從性能角度
相比第二種部署方式,第一種多走了一次進程間交互。
    按照第一種部署,當一個http請求過來,先是nginx反向代理轉發至nginx Web服務(通過網絡),Web服務再通過fastcgi協議與php-fpm進行交互(進程間交互);
    按照第二種部署,當一個http請求過來,充當Web服務的nginx,直接通過網絡與php-fpm進行交互
第一種部署,通過網絡交互的是HTTP協議,第二種通過網絡交互的是fast-cgi協議, 這兩種協議對比如何呢?
    fast cgi 的數據包會比HTTP稍微大一些,fast cgi協議會比HTTP攜帶更多的參數信息、傳輸控制信息等等。
    fast cgi 協議比HTTP協議格式化嚴格一些,解析起來速度更快一些。

從運維角度
    第一種是最常見的部署方式,簡單統一,所有提供web服務的服務器上的服務都是同構的,單調粗放。
    第二種則是將nginx和php-fpm單獨分開部署,不同服務在服務器集羣上的分佈更加細緻。如果統計Web服務中的壓力分佈,可以更加精細地利用硬件資源。運維成本也更高。

從開發測試角度
兩種部署方式都不合適開發環境或測試環境。
開發和測試環境把nginx和PHP部署到一臺服務器上即可,不需要反向代理和負載均衡。

總結
如果是LAMP環境的部署,第一種比較常見。
如果不是LAMP,是nginx和其他fastcgi服務交互,比如C/C++、java的fastcgi程序,在大規模的網絡應用中,類似第二種的部署是常見的。做到不同服務之間分開部署,反而是簡化了系統的網絡結構,更加便於維護。





本文鏈接:http://it.zuocheng.net/compare-2-nginx-php-deployee-mode-zh


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章