標籤:

Nginx 與 PHP 合併部署與分開部署 哪種性能更好一些?

兩台伺服器, 兩種情況:

1. 兩台都同時部署 nginx + php-fpm

2. 一台部署nginx 一台部署 php-fpm, nginx將php請求反向代理給後面的 php-fpm 伺服器

我的看法是:

第一種,配置在一起,雖然看似兩台nginx可以承載更多的請求,但是由於nginx與php之間 tcp埠,CPU,Mem資源的爭搶,很容易造成 nginx timeout, cant connect等錯誤,看似nginx收到了很多請求,但php正常處理返回的其實並沒那麼多。

第二種,資源分開,靈活性更高,nginx快速代理,php快速處理,可承載的有效並發會更高一些,高並發時,系統也會更穩定一些。

請問大家,以上兩種情況,哪種可承載的有效並發會高一些?為什麼? 大家平時會使用哪一種?


假設有2台伺服器A和B,不考慮資料庫(MySQL)和緩存(Redis)服務的話,可以在A上部署Nginx和PHP-FPM,在B上只部署PHP-FPM.用Nginx內置的upstream模塊給A和B上的PHP-FPM做負載均衡.

upstream php_backend {
# weight默認為1,值越大,這台server負載的權重就越大
server 127.0.0.1:9000 weight=1; # 伺服器A(本地)上的PHP-FPM
server 10.8.1.20:9000 weight=2; # 伺服器B上的PHP-FPM
}
server {
# 伺服器A和B上都需要有這個目錄,項目就部署到這裡.
root /data/www/example.com/public_html;
location ~ .php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php_backend; # 把PHP請求交給php_backend這個upstream來處理
fastcgi_index index.php;
}
}


第一種好

nginx做haproxy保證高可用

nginx通過unix socket連接到後端的phpfpm,同時一台機器上面可以啟用多個phpfpm進程(埠),保證充分利用資源

nginx不是瓶頸,phpfpm才是。


nginx-nginx/squid-apache 混合吧,如果真的高並發,大流量,一層是不夠的


我怎麼覺得一台Nginx,然後兩台都放後端php-fpm更好?

Nginx一般不會是瓶頸,後端處理不過來才是。

另外看你業務需求,一般來說php-fpm的性能不會太好,有時候後端PHP全用Apache的反而更好。


假設你所說的場景成立,第一種比較好。

首先2台伺服器,你的場景必然沒有太多量,其次,用第一種你可以只啟用其中一個nginx做反向代理,然後權重給自己本機少一點(防止資源分配不均),另外一台只用php-fpm,權重分配得高一點。用戶起來了,把集群搭起來,雖然會資源浪費和部署麻煩的問題,但用戶用得好才是硬道理,而且做集群還能簡單做灰度環境過渡步驟。

扯遠了,總的來說我比較支持第一種,然後權重適當做調配。


你的理解不對。舉個例子,張三隻做分揀(單機部署nginx),李四隻做派送(單機部署fpm),業務忙的時候忙的忙死,閑的閑死(沒有充分利用資源)。張三李四又負責分揀、派送(雙機都部署),能充分利用資源,但是業務最忙的時候,忙做一團(進程搶佔資源),第二種如果掌握度(一直搶佔cpu)合理增加資源,資源有限的情況下處理能力要比第一種高效。再者應用至少2台做集群這都是常識了。


最好還都是兩台都裝nginx和php,這樣負載均衡健康檢測故障轉移預發布都很方便


其實可以做到2*2

就是兩台都裝nginx和php

然後在Nginx啟用均衡負載!

這樣性能應該是最好的~

而且可以做到備份!


同意樓上說的方法。這樣每層的效率都很高。另外nginx速度還是不錯的


推薦閱讀:

準確地配置 NginX (1)
為什麼考慮到溢出用減法來比較更好?
假如有一張100W左右數據的表,根據查詢條件進行分頁。如何分頁?

TAG:PHP | Nginx |