Nginx转发给Tomcat页面时,端口号丢失了

前段时间,将项目部署在现网时发现当执行登录以及退出时,发现所请求地址的端口默认丢失了。

因为之前项目没有问题,但是后来电信整体对所有项目进行漏洞扫描,发现此项目存在“登录前后的会话未更新”,修复后部署上线就发现此问题。所以最初以为是此问题造成的,就侧重对此问题进行追查,但是一直没有找到原因。接着,我在本地服务以及公司云服务进行测试发现均未发现此问题,就特别纳闷儿了。
最后发现,是因为本地服务以及云服务器没有通过Nginx转发到tomcat,现网环境使用了nginx + tomcat的架构, 采用nginx做了一层负载均衡代理,于是查看webapp获取到的requestURL,发现根本就没有浏览器发送的原始URL中的端口。问题就在于此, 浏览器发送的请求是交给nginx,而nginx转发请求给tomcat时,端口号已经丢失掉了,

解决方式

在网上找了下原因,发现Nginx配置有问题。

  • 网站页面中直接读取了服务器ip和端口号。
  • 在网站服务端不能正确获取到port.或者做重定向的时候地址总是丢掉端口(port)。

最简单的解决方案,修改Nginx的配置文件:

server {
    listen       80;
    server_name  www.xxx.cn;

    server_name_in_redirect off;
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {
     proxy_pass http://***********:8080/;
    }
}

默认请求

location / {
     proxy_pass http://***********:8080/;
    }
}

如上才是正确的配置nginx。其中的proxy_set_header Host $host:$server_port; 设置转发端口。这一行是关键。

文章作者: 陈 武
文章链接: http://www.updatecg.xin/2017/08/24/Nginx转发给Tomcat页面时,端口号丢失了/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 我的学习记录
打赏
  • 微信
  • 支付寶

评论