天天看點

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

2種部署方式簡介

第一種

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

第二種

  1. 前置1台nginx伺服器做Web服務
  2. 後面伺服器隻部署php-fpm服務,供nginx伺服器調用
  3. 前置1台nginx伺服器,在調用後面多例php-fpm服務時,也可以做到負載均衡

安裝過程:Linux下安裝Lnmp環境之Nginx php-fpm不同伺服器部署

如下圖 :

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

對比

從系統設計角度

第一種部署是正常部署方式,大中小規模網站都能适用。

第二種,不同服務部署在不同伺服器上,更加細緻。但也有幾個問題:

1. 前置nginx充當Web服務。對靜态資源的通路、壓縮傳輸、緩存設定等,也都集中在這台伺服器上。壓力會大,容易成為瓶頸。

2. 如果靜态資源都存放于CDN,不需要HTTP 壓縮傳輸,這種部署方式還算比較合理;

3. 承接上面兩點,還可以對這種部署方式進行優化。如前置nginx負載均衡和反向代理,中間是nginx Web服務,後面部署php-fpm服務。

從性能角度

相比第二種部署方式,第一種多走了一次程序間互動。

  1. 按照第一種部署,當一個http請求過來,先是nginx反向代理轉發至nginx Web服務(通過網絡),Web服務再通過fastcgi協定與php-fpm進行互動(程序間互動);
  2. 按照第二種部署,當一個http請求過來,充當Web服務的nginx,直接通過網絡與php-fpm進行互動

第一種部署,通過網絡互動的是HTTP協定,第二種通過網絡互動的是fast-cgi協定, 這兩種協定對比如何呢?

  1. fast cgi 的資料包會比HTTP稍微大一些,fast cgi協定會比HTTP攜帶更多的參數資訊、傳輸控制資訊等等。
  2. fast cgi 協定比HTTP協定格式化嚴格一些,解析起來速度更快一些。

從運維角度

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

從開發測試角度

兩種部署方式都不合适開發環境或測試環境。

開發和測試環境把nginx和PHP部署到一台伺服器上即可,不需要反向代理和負載均衡。

總結

如果是LAMP環境的部署,第一種比較常見。

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