該問題是最早發現的,因爲以前對nginx不是特別的熟悉因此該問題是個入門級別的:
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端口,保持對外端口相同。shell
因而乎,我便想固然的把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去了 tomcat
這是爲何呢?????測試
原來,若是nginx的監聽端口不是默認的80端口,改成其餘非80端口後,後端服務tomcat中的request.getServerPort()方法沒法得到正確的端口號,仍然返回到80端口。在response.sendRedirect()時,客戶端可能沒法得到正確的重定向URL。spa
因此正確的配置:
code
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; } }