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

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

  1. 问题场景:
    登录成功后,跳转主页,端口丢失,无法访问。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://;
    }
  2. 网上提供的方案:
    1) proxy_set_header Host $ host:$server_port;
    改为
    proxy_set_header Host $host:81;(写死监听端口,经测试无效)
  3. 最终解决方案:
    增加配置: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,成功进入主页;
    参考连接:[https://www.95id.com/oauth2-client-nginx-bugs.html]
  4. 总结:
    目前只解决问题,具体原因未知,欢迎大佬指正!