Nginx 中精确匹配用 location = /path 语法,仅匹配完全相同的 URI path(区分大小写、含末尾斜杠),忽略查询参数;优先级最高,不支持通配符或变量。

在 Nginx 中实现 exact match(精确匹配),核心就是用 = 修饰符,它要求请求的 URI 必须和 location 后的路径完全一致——包括大小写、末尾斜杠、查询参数都不参与匹配(即只比对 path 部分)。
怎么写精确匹配的配置
语法很简单:
-
location = /path { ... }—— 注意等号 紧贴 location 关键字,中间不能有空格 - 路径必须是完整、规范的 URI path,比如
/login、/api/v1/health、/favicon.ico - 不支持通配符或变量;也不能带正则元字符(如
.、$、^)
为什么用 = 而不是普通前缀匹配
普通写法 location /login { ... } 是前缀匹配,会同时匹配 /login、/login/、/login-admin 等所有以 /login 开头的路径,容易误触。而 location = /login 只响应 严格等于 /login 的请求,避免歧义。
- 例如:请求
GET /login?next=/home→ 匹配成功(查询参数不影响) - 请求
GET /login/或GET /login-admin→ 不匹配,会继续查找其他 location
实际常用场景
精确匹配适合那些语义明确、不可扩展的终端路径:
- 静态资源固定入口:
location = /robots.txt { root /var/www; } - 健康检查接口:
location = /healthz { return 200 "OK"; } - 登录/登出页:
location = /logout { return 302 /; } - 防止目录遍历:
location = /nginx-status { stub_status on; }(配合 allow/deny)
注意优先级和常见陷阱
= 是 Nginx 所有 location 匹配中优先级最高的类型,一旦命中立即生效,不再检查其他规则。
- 如果同时存在
location = /api和location /api,前者一定优先生效 - 不要写成
location = /api/去匹配/api,它们是不同路径;末尾斜杠属于路径一部分 - 精确匹配不支持捕获变量,想提取 ID 或参数请改用正则匹配(
~)


















