根據 url 將流量重定向到不同的 ip 地址維護埠和 url 資訊
我們有一個 QA 版本、一個 UAT 版本和一個 DEV 版本的 webapp。使用者需要通過
http://uat.company.com:41002/webapp
、http://qa.company.com:41002/webapp
和訪問這些http://dev.company.com:41002/webapp
。在埠 41001 和埠 8080 上還有一個不同的 webapp,它們需要訪問。這些 url 必須在公司外部可用,並且我們只有一個可以訪問它們的公共 IP 地址。因此,DNS 記錄需要所有 3 個地址指向一個 IP。在那個單一的 IP 地址上,有一個伺服器正在執行 nginx。在後台我需要每個 url 指向不同的伺服器
http://uat.company.com --> 123.123.123.1 http://qa.company.com --> 123.123.123.2 http://dev.company.com --> 123.123.123.3
恐怕我不知道正確的術語,但是 URI 和埠的其餘部分也必須轉移到 IP 地址。即如果有人訪問
http://uat.company.com:41002/webapp/somepage`
它看起來好像是他們訪問過的頁面,但實際上他們會查看
http://123.123.123.1:41002/webapp/somepage
或者如果他們訪問
http://qa.company.com:8080/static/home.html
他們真的會看
http://123.123.123.2:8080/static/home.html
但他們的瀏覽器仍然會說
http://qa.company.com:8080/static/home.html
我試過了
server { server_name uat.company.com; listen 41001; listen 41002; listen 8080; location / { proxy_pass http://123.123.123.1:$server_port$uri; proxy_set_header Host $host; }
}
但是,這給了我一個帶有日誌的錯誤網關 502 頁面:
2015/01/28 16:04:49 [crit] 30571#0: *1 connect() to 123.123.123.1:41002 failed (13: Permission denied) while connecting to upstream, client: 172.23.128.245, server: uat.company.com, request: "GET /webapp/ HTTP/1.1", upstream: "http://123.123.123.1:41002/webapp/", host: "uat.company.com:41002"
我希望這更清楚。
更新 來自 Xaviers 的建議,即 SELinux 可能一直在阻礙,我已禁用它並且我確實走得更遠。使用上面的 nginx 配置現在似乎連接到第二個伺服器:但是埠仍然沒有通過。我打電話
uat.company.com:41002/webapp/
如果直接呼叫服務,這將重定向到
uat.company.com:41002/webapp/spring/config/main
然而,通過代理髮生的事情是它正在返回或結束於
uat.company.com/webapp/spring/config/main
因此無法載入頁面…
我已經確定了我的設置存在什麼問題。
SELinux 阻止我連接上游。我現在已禁用此功能,稍後會考慮正確設置
proxy_pass 正在按預期工作,但是我需要的參數是
http://123.123.123.1:$server_port/$uri$is_args$args;
3)
proxy_set_header Host $host
正確地將主機名設置回我想要的,但是牠吃掉了埠號。我需要的正確格式是proxy_set_header Host $host:$server_port
可能有更簡潔的解決方案,我還沒有一個完整的工作解決方案,因為我已經削減它以使其工作,但是我的配置的一個工作部分是:
server { listen 41002; server_name uat.comapny.com; location /webapp { proxy_pass http://123.123.123.1:41002/$uri$is_args$args; proxy_set_header Host $host:$server_port; } }
一旦我充實了它,我將發布一個更通用的版本。非常感謝所有幫助過的人。