你的理解有一定道理,但关键在于 rewrite 指令的 break 标志

在 Nginx 中,rewritebreak 标志会停止当前 location 内的重写处理,但不会重新进行 location 匹配。所以即使 URI 被改成了 /xxx(去掉了 /api/ 前缀),请求仍然停留在当前 location /api/ 块内,继续执行后面的 proxy_pass 等指令,最终将修改后的 URI 代理到后端。

如果误用了 last 标志,则会在重写完成后重新匹配 location,此时 URI 变成 /xxx,就可能匹配到 location / 块,导致代理失效。但这里用的是 break,所以安全

总结

  • rewrite ... break; → 在当前 location 内继续处理,不会重新匹配 location
  • rewrite ... last; → 重写后重新匹配 location,可能跳转到其他 location

因此,你提供的配置中,/api/xxx 的请求会始终走代理,不会落到 location / 里。

标签: none

添加新评论