Nginx中=修饰符实现最高优先级的精确匹配,仅当请求URI与配置路径完全一致(不含查询参数、不支持正则、尾部斜杠必须显式指定)时生效,匹配成功即终止后续所有匹配。

直接用 = 符号加完整路径,就能实现精确匹配。它只响应**完全一致**的 URI,多一个字符、少一个斜杠都不行。
= 精确匹配的核心特点
= 是所有 location 匹配中优先级最高的,一旦匹配成功,Nginx 立即停止后续所有匹配,直接执行该块内的配置。
- 匹配的是整个请求 URI,不包含参数(query string),例如
/login能匹配https://example.com/login和https://example.com/login?next=/admin - 不能带尾部斜杠(除非你写的就是带斜杠的),
location = /只匹配根路径,不匹配/index.html或// - 不支持正则语法,只做字符串全等比较
常见写法和例子
在 server 块内直接定义:
location = / {
return 200 "Welcome to homepage";
}
<p>location = /favicon.ico {
alias /var/www/static/favicon.ico;
}</p><p>location = /healthz {
return 200 "OK";
}-
location = /:仅响应GET /,不响应/index.html、/abc、甚至/?a=1(URI 仍是/,所以这个仍会匹配) -
location = /api/v1/users:只匹配/api/v1/users,不匹配/api/v1/users/123或/api/v1/users?
和普通前缀匹配的区别
对比下面两个配置:
location = /test { ... } # 只匹配 /test
location /test { ... } # 匹配 /test、/test/、/test123、/test/abc 等所有以 /test 开头的路径如果你只想让某个特定路径走特殊逻辑(比如跳转、返回固定内容、拒绝访问),= 是最安全、最明确的选择。
注意事项
- 不要在
=后面加正则符号或通配符,比如location = /.*或location = /test*—— 这样不会按正则运行,而是当作字面量字符串去比对 - 多个
=块之间互不影响,但同一 URI 不应重复定义,否则只有第一个生效(Nginx 加载时按顺序读取,但=本身不依赖顺序) - 如果同时存在
location = /和location ^~ /,前者一定胜出;通用location /几乎总被=或更长的前缀覆盖


















