nginx中location = 实现uri完全一致的精准匹配,区分大小写且立即终止搜索;语法为“location = /path”,不匹配带斜杠、大小写差异或查询参数的变体,优先级最高。

在 Nginx 的 server 块中,用 location = 语法可实现对请求路径的精准匹配——即只响应**完全一致**的 URI,不多也不少,区分大小写,且匹配后立即终止搜索,不走其他规则。
精准匹配的写法和要点
语法必须带等号 =,紧跟一个空格,再写完整路径:
-
location = /login { ... }→ 只匹配GET /login,不匹配/login/、/login?next=/home或/Login -
location = / { ... }→ 只匹配根路径/,不匹配任何子路径(如/index.html) - 路径末尾的斜杠不能省略或多余:
location = /api和location = /api/是两个不同规则
常见误用与纠正
容易混淆的是把精准匹配写成普通前缀匹配:
- ❌
location /login { ... }→ 这是前缀匹配,会同时匹配/login、/login/、/login-123 - ✅
location = /login { ... }→ 真正只认/login这一个字符串 - ⚠️ 查询参数(
?key=value)不影响匹配结果,Nginx 在匹配阶段自动忽略它们
典型使用场景
精准匹配适合高频、确定性极强的入口点:
- 网站首页静态响应:
location = / { return 200 "Welcome"; } - 健康检查端点:
location = /healthz { return 204; } - 特定登录页转发:
location = /auth/login { proxy_pass http://auth-svc; } - 错误页面显式定义:
location = /404.html { root /usr/share/nginx/html; }
注意与其他 location 的协作
精准匹配优先级最高,一旦命中就不会再检查其他 location(包括 ^~、~、普通前缀等):
- 即使你写了
location ^~ /login和location = /login,请求/login也只会进入后者 - 但
/login/会跳过= /login,继续匹配^~ /login或其他规则 - 因此,精准匹配常作为“兜底中的兜底”,用于明确排除歧义











