Nginx配置location匹配规则总是不生效怎么办?
我最近在用 Nginx 部署一个前端项目,想把所有 /api 开头的请求代理到后端服务,但不管怎么改 location 规则都没用,请求还是被当成了静态资源处理。我试过 =、~、^~ 这些前缀,也重启了 Nginx,但就是不走 proxy_pass。
这是我的前端页面里发起的请求代码:
<script>
fetch('/api/user/profile')
.then(res => res.json())
.then(data => console.log(data));
</script>
是不是我的 location 写法有问题?或者匹配顺序搞错了?
Nginx 的 location 匹配顺序是这样的:精确匹配 = 最优先,然后是 ^~ 前缀匹配(匹配到就停止匹配),再然后才是正则 ~ 或 ~*,最后才是普通前缀匹配 /。
你试了 =、~、^~ 但还是不行,很可能是你写了类似 location / 这样的规则在前面,把所有请求都当作静态资源处理了。
直接给你能跑的配置:
你检查一下是不是把 location /api 放在了 location / 后面。如果是的话,/api 会被 location / 先匹配到,因为 / 也能匹配 /api 开头。
另外提醒一下,修改完配置一定要用 nginx -t 先验证配置有没有语法错误,然后 nginx -s reload 重载配置,别用 restart,那会中断服务的。