You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx正则重定向配置问题:不同路径转发至指定IP不生效

两组配置错误原因排查

第一组配置问题

  • 正则匹配规则存在逻辑错误:^/(?:test)/(.*)$ 要求路径必须是/test/开头(test后强制带斜杠),访问/test(不带尾斜杠)时完全匹配不到规则,最终会落到默认的proxy_pass规则转发到11.11.11.11
  • rewrite指令使用了break参数,只会在当前location内生效,不会终止location匹配流程,转发逻辑本身就存在设计缺陷。

第二组配置问题

  • location匹配规则限定过严:^~ /test/要求路径必须以/test/开头(同样强制尾斜杠),访问/test时匹配不到该规则,会直接走根路径的location转发到11.11.11.11
  • 大概率存在浏览器缓存干扰:首次访问根域名后,浏览器会缓存静态资源甚至301跳转规则,后续访问/test时命中缓存,就会继续展示根站点内容,排查时优先避开浏览器缓存验证。

正确可用配置

# 精确匹配根路径,仅访问www.example.com时转发到11.11.11.11
location = / {
    proxy_pass http://11.11.11.11/;
}

# 匹配所有/test开头的路径,包含/test、/test/、/test/xxx等所有子路径
location ^~ /test {
    proxy_pass http://22.22.22.22/;
}

# 匹配所有/api开头的路径,包含/api、/api/、/api/xxx等所有子路径
location ^~ /api {
    proxy_pass http://33.33.33.33/;
}

配置说明

  • 用location = /做根路径的精确匹配,避免根路径的规则误覆盖子路径
  • 去掉/test和/api匹配规则后的尾斜杠,^~ /test可以命中所有test开头的路径,完全符合需求
  • 如果需要把原路径完整传递给后端,比如将/test/abc转发到http://22.22.22.22/test/abc,只需要删掉proxy_pass地址后的尾斜杠即可,修改为proxy_pass http://22.22.22.22;

验证方法

重载配置后用curl命令测试,完全规避浏览器缓存影响:

# 测试根路径转发
curl -I www.example.com
# 测试test路径转发
curl -I www.example.com/test
# 测试api路径转发
curl -I www.example.com/api

查看返回的响应头即可判断转发目标是否符合预期。


内容的提问来源于stack exchange,提问作者tchitooss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:27:03