Docker中Nginx反向代理端口映射异常跳转80端口解决方案
问题根因
访问时跳转到宿主机80端口,核心是两个配置疏漏:
- 反向代理过程中,Nginx默认不会修改上游服务返回的3xx重定向响应里的Location字段,上游返回的重定向地址未携带11111端口,浏览器拿到地址后默认请求80端口
- 代理请求未主动设置Host请求头,上游服务收到的请求Host为宿主机IP+端口,和自身站点域名不匹配会触发主动重定向,同时现有配置未处理
/goto不带末尾斜杠的路径匹配场景,进一步放大跳转异常。
修复方案
调整Nginx配置中对应location块的代理规则,补全必要配置:
- 替换原server块配置为以下内容
server { listen 80; # 处理不带末尾斜杠的/goto路径访问,直接跳转到带斜杠的标准路径 location = /goto { return 301 /goto/; } location /goto/ { # 设置代理请求头,保证上游服务能正确识别请求 proxy_set_header Host www.kugou.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 核心配置:自动改写上游返回的重定向地址,匹配当前代理路径 proxy_redirect ~^(https?://[^/]+)/(.*)$ /goto/$2; proxy_pass https://www.kugou.com/; } }
- 配置修改完成后执行校验和重载
- 容器内执行
nginx -t确认配置无语法错误 - 执行
nginx -s reload重载配置生效,Docker部署场景可直接在宿主机执行docker exec <你的Nginx容器名> nginx -s reload
- 容器内执行
- 清空浏览器缓存后重新访问
114.188.16.20:11111/goto即可正常代理访问,不会再跳转到80端口。
内容的提问来源于stack exchange,提问作者陈少锋
相关产品推荐
相关产品推荐

