Nginx

Nginx 反向代理設置

  • June 28, 2016

我目前有幾百個 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匹配它們的舊但仍然相關的答案。

引用自:https://unix.stackexchange.com/questions/291636