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

如何配置Nginx规则?现有location=/admin返回404,需实现指定转发

解决Nginx admin路径转发的404问题

你遇到的问题核心是精确匹配规则和URI传递逻辑的冲突,原来的配置只能命中单一的/admin请求,还没法正确传递后续子路径,自然会导致子路径请求返回404。下面给你两种靠谱的配置方案,都能实现你想要的转发效果:

方案一:前缀匹配 + URI重写

location /admin {
    rewrite ^/admin(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8090;
}
  • location /admin是前缀匹配规则,会命中所有以/admin开头的请求(包括/admin、/admin/test、/admin/one)
  • rewrite指令会把请求URI里的/admin前缀剥离,剩下的部分(比如/test、/one)作为新的URI转发到后端服务

方案二:利用proxy_pass的URI替换特性

# 处理带斜杠的子路径请求
location /admin/ {
    proxy_pass http://127.0.0.1:8090/;
}

# 处理不带斜杠的/admin请求,自动跳转带斜杠版本
location = /admin {
    return 301 /admin/;
}

这里要特别注意两边的斜杠都不能省略:

  • location /admin/会匹配所有以/admin/开头的请求,proxy_pass末尾的/会告诉Nginx,把请求里的/admin/替换成/,这样/admin/test就会转发到http://127.0.0.1:8090/test
  • 额外加的location = /admin是为了处理用户直接访问example.com/admin的场景,自动跳转到带斜杠的版本,避免出现404

为什么原来的配置失效?

  • location = /admin是精确匹配,只有当请求URI完全等于/admin时才会命中,/admin/test这类子路径根本不会触发这个规则,Nginx会用默认规则处理,返回404
  • 就算命中了/admin请求,原来的proxy_pass http://127.0.0.1:8090没有末尾斜杠,Nginx会把/admin原样转发到后端,也就是http://127.0.0.1:8090/admin,如果后端没有对应路径,同样会返回404

配置完成后,记得执行sudo nginx -t检查配置语法是否合法,没问题的话再执行sudo nginx -s reload让配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:48:16