2種部署方式簡介
第一種
- 前置1台nginx伺服器做HTTP反向代理和負載均衡
- 後面N太伺服器的Nginx做Web服務,并調用php-fpm提供的fast cgi服務
- 此種部署方式最為常見,web服務和PHP服務在同一台伺服器上都有部署
第二種
- 前置1台nginx伺服器做Web服務
- 後面伺服器隻部署php-fpm服務,供nginx伺服器調用
- 前置1台nginx伺服器,在調用後面多例php-fpm服務時,也可以做到負載均衡
安裝過程:Linux下安裝Lnmp環境之Nginx php-fpm不同伺服器部署
如下圖 :

對比
從系統設計角度
第一種部署是正常部署方式,大中小規模網站都能适用。
第二種,不同服務部署在不同伺服器上,更加細緻。但也有幾個問題:
1. 前置nginx充當Web服務。對靜态資源的通路、壓縮傳輸、緩存設定等,也都集中在這台伺服器上。壓力會大,容易成為瓶頸。
2. 如果靜态資源都存放于CDN,不需要HTTP 壓縮傳輸,這種部署方式還算比較合理;
3. 承接上面兩點,還可以對這種部署方式進行優化。如前置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程式,在大規模的網絡應用中,類似第二種的部署是常見的。做到不同服務之間分開部署,反而是簡化了系統的網絡結構,更加便于維護。