NGINX跳转时URI自动拼接域名导致404 Not Found错误如何解决
问题产生原因
- 上游服务跳转逻辑错误:上游生成返回跳转地址时,错误将域名
domain1.com直接拼接到了URI路径前,而非作为域名部分使用,浏览器接收到该相对路径跳转地址后,会和当前域名拼接,最终生成https://domain1.com/domain1.com/test的错误访问地址 - 已配置的重写规则未生效,通常是以下几类原因:
- 规则语法错误,例如正则转义符缺失、标记位使用不当
- 未按照Nginx location匹配优先级配置规则,导致错误地址没有命中你写的匹配规则
- 修改配置后未执行
nginx -s reload重载配置,或重载前未通过nginx -t检查配置合法性,规则未实际生效
修复方案
方案1:优先修改上游服务(推荐)
直接调整上游服务的跳转生成逻辑,生成跳转地址时不要将域名拼入URI路径,直接输出/test这类正确的相对路径,或者输出完整的带域名的绝对跳转地址,从根源避免错误。
方案2:通过Nginx重写规则修复(无法修改上游时使用)
直接在Nginx对应server块下添加如下规则即可:
# 方案2.1:内部重写,用户地址栏不变,直接转发到正确路径 rewrite ^/domain1\.com/(.*)$ /$1 break; # 方案2.2:返回301跳转修正浏览器地址,后续访问直接使用正确地址,适合长期修复 # rewrite ^/domain1\.com/(.*)$ /$1 permanent;
配置完成后执行nginx -t检查语法,确认无报错后执行nginx -s reload重载配置即可生效。
旧规则不生效的排查补充
如果你之前已经写了类似规则未生效,可按以下顺序排查:
- 确认正则中
.已添加转义符\,否则会被识别为通配符而非普通点号 - 确认规则写在
server块下,或者写在能命中错误路径的location块中 - 若你用
location匹配错误路径,确保规则优先级正确:精准匹配 > 长前缀匹配 > 正则匹配 > 短前缀匹配,不要让根路径的location /覆盖了错误路径的匹配规则
内容的提问来源于stack exchange,提问作者dreamsinmatrix
相关产品推荐
相关产品推荐

