美文网首页
Nginx转发给Tomcat页面时,端口号丢失了

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

作者: 陈兄 | 来源:发表于2019-01-25 13:59 被阅读0次
    image

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

    因为之前项目没有问题,但是后来电信整体对所有项目进行漏洞扫描,发现此项目存在“登录前后的会话未更新”,修复后部署上线就发现此问题。所以最初以为是此问题造成的,就侧重对此问题进行追查,但是一直没有找到原因。接着,我在本地服务以及公司云服务进行测试发现均未发现此问题,就特别纳闷儿了。

    最后发现,是因为本地服务以及云服务器没有通过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; 设置转发端口。这一行是关键。

    相关文章

      网友评论

          本文标题:Nginx转发给Tomcat页面时,端口号丢失了

          本文链接:https://www.haomeiwen.com/subject/amvmjqtx.html