nginx監聽端口非80時的轉發問題

該問題是最早發現的,因爲以前對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;
    }
}
相關文章
相關標籤/搜索