解决 nginx 反向代理监听非 80 端口造成的端口丢失问题

端口丢失

去访问 90 口加上项目名,不知为什么会自动跳回 80 端口,nginx 配置文件如下。

server {
        listen       90;
        server_name  your domain ;
        
        location / {
        proxy_set_header Host $host;
        proxy_pass http://www_server_plool;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}

又找到了一台 linux 服务器,使用 curl 命令看了一下状态码是 302,而且 Location 返回的地址 90 端口消失了,问题就出在了这里,我 80 口并没有 NAT,所以根本访问不到。

原因

在内网 80 口代理的别的应用服务器,而不是现在要做的这套测试,所以又添加了一个配置文件,内网的 nginx 配置用的也是 90 端口,和外部端口一致,然后大概的查了一下,最后发现造成这个问题的原因是如果 nginx 的监听端口不是默认的 80 端口,改为其他端口,如 90 端口,后端服务器中 request.getServerPort () 无法获得正确的端口,返回的仍然是 80,在 response.sendRedirect () 时,客户端可能无法获得正确的重定向 url,而且在内网试了一下也有这个问题。

修改后的配置文件

server {
        listen       90;
        server_name    your domain ;
        
        location / {
        proxy_pass http://www_server_plool;
        proxy_set_header  Host $host:$server_port;  #添加:$server_port
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
}

平滑重启 nginx,最后使用 curl 命令看一下,返回地址正确。

发表评论

电子邮件地址不会被公开。

64 + = 65