nginx监听非80端口,转发地址端口丢失!解决方案

时间:2024-11-20

nginx监听非80端口,转发地址端口丢失!解决方案!!!!!


问题场景:

登录成功后,跳转主页,端口丢失,无法访问。nginx监听端口:81,

tomcat访问端口:9004。例如:登录地址:http://xxx:81/login,

登录成功后跳转地址:http://xxx:81/index,

但实际跳转地址变为:http://xxx/index,nginx代理端口(81)无故消失,导致无法访问。

nginx配置如下:


location /xxx/{    proxy_pass http://127.0.0.1:9004/xxx/;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-Proto https;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header Host $ host:$server_port;    proxy_redirect http:// https://; }


网上提供的方案:

proxy_set_header Host $ host:$server_port; proxy_set_header Host $host:81; // 改为(写死监听端口,经测试无效)

最终解决方案:

增加配置:proxy_set_header X-Forwarded-Port $server_port;

最终配置如下:

location /xxx/{    proxy_pass http://127.0.0.1:9004/xxx/;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-Proto https;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header Host $ host:$server_port;    proxy_set_header X-Forwarded-Port $server_port;(这个配置是重点)    proxy_redirect http:// https://; }

重启nginx,成功进入.

总结:因为http进行转发没有端口.完整代码

server {
    listen 443 ssl;
    server_name xxxx.com; 
    ssl_certificate /xxxx.pem;
    ssl_certificate_key /xxx.key;
 
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
     location /video/ {
        proxy_redirect http:// https://;
        #port_in_redirect on;
        add_header 'Access-Control-Allow-Origin' 'https://xxx.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        proxy_pass https://192.168.1.248:5556/;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
    }

    location / {
        proxy_redirect http://xxxx.com https://xxx:8182;
        port_in_redirect on;
        add_header 'Access-Control-Allow-Origin' 'https://xxxxx.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        proxy_pass http://192.168.2.2: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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
  
}






免责声明:服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
IPv4 © 2005-2025 库目书 版权所有 | kumushu.com .All Rights Reserved
黑ICP备2022003236号-1