Docker环境下Nginx配置根路径重定向到/portal跳转异常如何解决
问题原因
你遇到的跳转异常核心是两个问题:
- Nginx默认开启
absolute_redirect,相对路径的301跳转(return 301 /portal)会自动补全为绝对路径,补全过程使用的$host变量不包含请求端口,而你的Nginx在Docker容器内监听80端口,外部映射的8080端口默认不会被识别到。 - 你当前的代理配置没有传递原始请求的端口和协议信息,再加上可能存在的HTTP强制跳转HTTPS逻辑,最终导致跳转到了错误的地址。
解决方案
按以下步骤修改你的Nginx配置即可:
- 根路径的重定向规则优先使用精确匹配,同时调整Host传递逻辑,用
$http_host替代$host($http_host会完整保留用户请求的域名+端口),补充原始协议和端口的转发字段 - 关闭自动补全绝对跳转路径,让浏览器直接基于当前访问地址处理相对路径跳转,适配不同端口场景
修改后的完整配置参考:
upstream webportal { server portal_container:8080; } # 放在server块层级,关闭自动补全绝对跳转路径 absolute_redirect off; location = / { return 301 /portal; } location /portal { proxy_set_header Host $http_host; 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_set_header X-Forwarded-Port $server_port; proxy_pass http://webportal; }
修改配置后重载Nginx配置,再清理浏览器缓存(301是永久重定向,浏览器会缓存旧的跳转规则)即可生效。
内容的提问来源于stack exchange,提问作者rmmariano
相关产品推荐
相关产品推荐

