Nginx 的 location 匹配规则到底怎么生效的?

柯豪 Dev 阅读 21

我配置了两个 location,一个 /api,一个 /api/v1,但请求 /api/v1/user 时总是被第一个匹配到,后面的规则好像没生效?

我的配置大概是这样的:

location /api {
    proxy_pass http://backend;
}

location /api/v1 {
    proxy_pass http://new_backend;
}
我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
Mc.鉴恒
Mc.鉴恒 Lv1
Nginx 的 location 匹配是有顺序的,默认情况下,它会按照这个顺序来匹配:首先是精确匹配,然后是前缀匹配,接着是正则表达式匹配。在你的情况里,Nginx 先匹配到了 /api 这个前缀,所以后面的 /api/v1 没有生效。

解决这个问题,你需要调整一下 location 的顺序,或者明确指定匹配类型。你可以把更具体的路径放在前面,这样 Nginx 就能先匹配到它。修改后的配置可以这样:

location /api/v1 {
proxy_pass http://new_backend;
}

location /api {
proxy_pass http://backend;
}


这样 Nginx 会先尝试匹配 /api/v1,如果匹配上了就不会再去匹配 /api 了。前端这块有时候处理路由和代理的时候确实挺容易踩坑的,希望这能帮到你。
点赞
2026-03-21 09:00