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

火山引擎 最新活动