nginx配置:
server { listen 80; server_name localhost; location / { proxy_pass http://192.168.1.100:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
以上是nginx默認監聽端口號為80的情況,由於公司系統是內網應用,用戶已經將鏈接收藏起來了,收藏后的地址是之前的單台tomcat的8080端口,為了不影響他們的操作習慣所以決定讓nginx繼續監聽8080端口,保持對外端口相同。
於是乎,我便想當然的把nginx的端口號改成了8080,把tomcat的端口改為了8081。改后的nginx配置如下:
server { listen 8080; server_name localhost; location / { proxy_pass http://192.168.1.100:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
改完之后,重啟測試發現問題了:
當訪問http://localhost:8080后,瀏覽器自動跳轉到了 http://localhost去了
這是為什么呢?????
原來,如果nginx的監聽端口不是默認的80端口,改為其他非80端口后,后端服務tomcat中的request.getServerPort()方法無法獲得正確的端口號,仍然返回到80端口。在response.sendRedirect()時,客戶端可能無法獲得正確的重定向URL。
所以正確的配置:
server { listen 8080; server_name localhost; location / { proxy_pass http://192.168.1.100:8081; proxy_set_header Host $host:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }