精确匹配用 location = /path 语法,要求uri与路径完全一致(大小写敏感、无查询参数、无多余斜杠),匹配后立即执行且优先级最高,不继续检查其他location块。

精确匹配用 = 符号,写在 location 后面、路径前面,中间不能有空格。它要求请求的 URI 必须和指定路径完全一致,多一个斜杠、少一个字符、带查询参数都不算匹配。
怎么写才生效
语法必须严格:
location = /login { ... } ✅
location =/login { ... } ❌(= 和路径之间不能紧贴)
location = /login/ { ... } ❌(结尾多斜杠就不是完全相等)
- 只响应
GET /login,不响应/login?next=/home - 不响应
/login/、/login/a、/Login(大小写敏感) - 匹配成功后立即执行,不再检查其他
location块
常见误用场景
很多人以为 location = /static 能匹配所有静态资源,其实它只匹配 /static 这个完整路径,不匹配 /static/css/app.css 或 /static/。
- 想匹配所有以
/static开头的请求 → 改用location ^~ /static/或location /static/ - 想让
/只响应根路径,排除/abc→ 用location = /,而不是location / - 前端单页应用中拦截
/index.html→location = /index.html可确保只走这个规则,避免被通用规则覆盖
和其它匹配方式的区别
= 是优先级最高的匹配方式,比 ^~、正则、普通前缀都高。只要它命中,Nginx 就不会继续往下找。
-
location = /api和location /api同时存在 → 所有/api请求走精确匹配,/api/v1才走普通前缀 -
location = /health+location ~ \.php$→ 访问/health.php不会进 PHP 规则,因为=优先级更高
实际配置示例
比如限制健康检查接口只允许 GET 且路径绝对精准:
location = /health {
return 200 "OK\n";
add_header Content-Type text/plain;
}
这样 /health/、/health?ts=1、/HEALTH 都会返回 404,确保接口语义清晰、行为可预测。











