Nginx 反向代理設定

Nginx 反向代理設定

目前,我有數百個 Web 應用程式分佈在大約 20 台伺服器上,並且在這些運行的 Pound 和 Haproxy 前面有一個反向代理。 Pound 正在執行 http 到 https 重定向和 SSL 加密,然後轉送到 Haproxy,Haproxy 為每個網站設定了一條規則,以轉送到執行 Tomcat 的後端伺服器之一。所有網站都位於同一網域,例如 www.domain.com/webapp1、www.domain.com/webapp2

Pound 和 Haproxy 最初是由我們的主機供應商設定的,由於對 Pound 感到沮喪,我現在正在考慮用 Nginx 取代此設定。我已經讓 Nginx 在開發環境中運行,執行 https 重定向和 SSL,並且設定了一些規則來代理到後端。

我真的只是在尋求一些建議,看看這是否是解決此問題的最佳方法,或者我是否最好讓 Haproxy 處理所有規則並僅將 Nginx 配置為 Pound 的替代品。

我擔心的是,我將使用數百個如下所示的轉送規則來設定 Nginx,最終會出現效能問題。歡迎任何建議,謝謝。

location /webapp1/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp2/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp3/ {
     proxy_pass http://10.1.9.12:8080;
}

答案1

我對此了解不多,haproxy但我知道足以nginx解決您對效能問題的擔憂。

請注意,nginx配置被編譯為struct友好的格式並保存在記憶體中,不會在每次請求時讀取該檔案。因此,數百個location /...配置的運行速度幾乎與呼叫相同的次數一樣strlen()strncmp()。與套接字設定相比,這是可以忽略不計的。

網址是在匹配開始之前標準化=因此,除非您使用運算符之一 ( , ~, *~, ^~),否則匹配並沒有什麼真正聰明的地方。

您可以使用正規表示式匹配(~*~),然後使用一些if邏輯來在伺服器之間做出決定upstream,但是這將是一個緩慢的解決方案

另一方面,如果您確實有至少一個正規表示式位置,那麼您應該考慮使用^~運算符。請參閱馬丁雷蒙德 (Martin Redmond) 對 SO 的舊但仍然相關的答案關於不同的運算符以及如何nginx匹配它們。

相關內容