
我正在使用不同的配置測試 nginx,以替換使用魷魚 + apache 的架構。我知道我可以使用 nginx 來管理靜態請求和負載平衡,但我對我不太了解的特定解決方案感興趣:
我使用 2 個 nginx 伺服器(平衡)以及 proxy_pass 設定將所有請求傳遞到 apache 伺服器。當一個客戶端向網站發出請求時,其中一台 nginx 伺服器會處理該請求並將其傳送至 apache 伺服器。現在,這種行為如何改善我的系統?當 100 個並發連接通過 nginx 時會發生什麼? 100 個連線將連接到 apache 伺服器,還是某種內部行為對 apache 造成了較小的影響?
答案1
當您的網站有很多緩慢的連線時,Nginx 可以幫助您的 Apache。例如,nginx 狀態機架構不易受到 Slowloris DDoS 攻擊http://isc.sans.org/diary.html?storyid=6601。
答案2
我知道 nginx 可以執行很多功能,但為什麼不將架構的每一部分委託給能夠很好地完成其中某一部分的軟體呢?考慮其中的部分或全部:用於負載平衡的 pound 或 haproxy,用於反向快取代理的 varnish 或 squid,以及在後端使用 nginx 和 apache(分別)用於靜態和動態內容。
也就是說,我不太確定你的問題是什麼。你已經告訴 nginx 將所有請求(我假設「傳遞」是指不快取它們)傳遞到 apache 後端。如果沒有緩存,好處是將負載分佈到後端的多個 apache 伺服器上。如果您只有一台後端 apache 伺服器,那麼您只能透過快取內容來獲得好處,而不僅僅是直接傳遞請求。
有關您的設定以及您想要執行的操作的更多詳細資訊將會有所幫助。
答案3
同意 - 讓 nginx 直接提供靜態內容,而 Apache 只需要處理 PHP 的東西 - 這意味著 Apache 工作線程會減少很多,最終意味著更好的效能。
地點 / { proxy_pass http://backendwww; } 位置 ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ { 訪問_註銷; 30天到期; 根/var/www/application_webroot; error_page 404 = @fallback; } 位置@fallback { proxy_pass http://backendwww; } 位置 ~ /\.ht { 否認一切; }
答案4
同意 Zero*,讓 ennginx 處理所有靜態,但是,更簡單的配置只是將 php 傳遞到後端,而不是指定不傳遞給 Apache/PHP 的內容,例如:
location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }