nginx中路径精确匹配需用=前缀,要求uri完全一致(区分大小写、尾部斜杠必须匹配),优先级最高,如location = /api仅匹配/api,不匹配/api/或/api/users。

在 Nginx 中实现路径的精确匹配,要用 = 前缀,它表示“完全相等”,不支持正则、不忽略尾部斜杠、不进行前缀或通配扩展。
精确匹配语法:用 = 号开头
= 必须紧贴 location 关键字后,中间不能有空格;后面跟的路径必须与请求 URI 完全一致(区分大小写,且要求结尾斜杠也匹配)。
-
location = /api→ 只匹配GET /api,不匹配/api/、/api/users或/API -
location = /→ 只匹配根路径/,不匹配任何子路径(如/index.html) -
location = /status→ 匹配/status,但不匹配/status?arg=1?注意:查询参数不影响匹配,该规则仍生效
精确匹配优先级最高
当一个请求进来时,Nginx 会按以下顺序检查 location 块:
- 先找
=精确匹配 —— 找到就立即使用,不再继续匹配 - 再找
^~前缀匹配(非正则,但优先于正则) - 最后按顺序扫描正则匹配(
~、~*)
所以 = /health 比 location /health(前缀匹配)或 location ~ ^/health(正则)更优先,哪怕它写在配置文件靠后位置。
常见易错点和建议
- 不要混用
=和尾部斜杠:= /admin和= /admin/是两个不同规则,需分别定义 - 避免过度使用:只对明确、固定、高频访问的路径(如健康检查接口
/healthz、静态资源入口= /favicon.ico)用精确匹配 - 调试技巧:开启
error_log /path/to/log notice;,并用curl -v http://host/path观察实际匹配的 location(配合log_format加入$request_uri和$location变量)
实用示例
以下配置让 /ping 走内部响应,其他 /api/... 转发到上游:
location = /ping {
return 200 "OK\n";
}
location /api/ {
proxy_pass http://backend;
}
此时 GET /ping 直接返回 200;GET /ping/ 或 GET /ping?q=1 不匹配该规则(后者仍匹配,因为 query string 不参与匹配),但前者会落入 /api/ 的前缀匹配中 —— 所以如果需要排除所有变体,要单独处理。











