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; }
我對此知之甚少,
haproxy
但我知道足以nginx
回答您對性能問題的擔憂。請注意,
nginx
配置被編譯為struct
友好格式並保存在記憶體中,不會在每次請求時讀取該文件。因此,數百種配置的執行速度幾乎與呼叫+相同次數location /...
一樣快。與套接字設置相比,這可以忽略不計。strlen()``strncmp()
URL在匹配開始之前被規範化,
=
因此除非您使用運算符之一( ,~
,*~
, ),否則匹配沒有什麼真正聰明的地方^~
。您可以使用正則表達式匹配 (
~
,*~
),然後使用一些邏輯在伺服器if
之間做出決定,但這將是緩慢的解決方案。upstream
另一方面,如果您確實有至少一個正則表達式位置,那麼您應該考慮使用
^~
運算符。請參閱Martin Redmond 在 SO關於不同運營商以及如何nginx
匹配它們的舊但仍然相關的答案。