背景

Nginx 配置反向代理,将本地监听于非 443 端口的 HTTP 服务映射到公网。通过公网 HTTPS 域名访问首页正常,当访问目录路径且未添加尾部斜杠(例如 /admin)时,浏览器地址栏跳转至错误的地址。URL 显示为 http://域名:端口/admin/。该地址暴露了本地端口且协议降级,导致公网无法访问。

原因

Nginx 处理目录请求时,若路径未包含尾部斜杠,会执行 301 重定向以补充斜杠。默认配置下,Nginx 在构造重定向 URL 时会将其监听的本地端口拼接进地址。这导致客户端收到的重定向地址与实际公网访问端口(443)不一致。

方案

在 Nginx 配置文件的 server 块中添加 port_in_redirect off; 指令。 配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
server {
    listen 443 ssl;
    server_name example.com;
    # 关键配置:禁止 Nginx 在重定向 URL 中携带端口号
    port_in_redirect off;
    location / {
        proxy_pass http://127.0.0.1:8080;
        # 其他代理配置...
    }
}

修改配置后执行 nginx -s reload 重载服务。

结论

该指令禁止 Nginx 在生成重定向 URL 时附加端口号,解决了非标准端口反向代理场景下的端口错误问题。