nginx中location = 表示精确匹配,要求uri完全一致(含结尾斜杠、大小写),不支持正则和通配符,优先级最高,命中即终止匹配。

在 Nginx 的 location 块中使用 = 符号,就是启用精确匹配——它要求请求的 URI 必须与配置中的路径**完全一致**,不能多也不能少,包括结尾斜杠、大小写、查询参数(不参与匹配)等细节都要严格对应。
精确匹配的基本写法
= 必须紧跟在 location 关键字后,且前后各留一个空格;URI 部分不能含正则语法,也不支持通配符。
-
location = /login { ... }:只匹配GET /login或POST /login,不匹配/login/、/login?next=/home、/login2 -
location = / { ... }:仅匹配根路径/,不匹配/index.html或// -
location = /api/v1/status { ... }:只响应/api/v1/status,哪怕加个/(如/api/v1/status/)也不匹配
常见误用和注意事项
精确匹配看似简单,但容易因路径细节出错:
- 结尾斜杠是关键:
location = /admin和location = /admin/是两个完全不同的匹配项 - 大小写敏感:
location = /Profile不会匹配/profile(除非系统本身忽略大小写,但 Nginx 默认区分) - 查询字符串不参与匹配:
/search?=q=test仍由location = /search处理(只要路径部分完全一致) - 不能混用修饰符:
location = ~ /abc是非法语法,=与正则修饰符互斥
与其他匹配方式的优先级关系
= 是所有 location 匹配中优先级最高的。一旦命中,Nginx 立即选用该块,不再检查其他任何 location(包括 ^~、~、普通前缀等)。
- 例如同时存在:
location = /health { return 200 "ok"; }location /health { return 404; }
访问/health时,永远返回 200,不会走到第二条 - 即使
location /healthz更长,也不会干扰location = /health的执行
实用建议
精确匹配适合明确、固定、高频的单点路径,比如:
- 静态资源入口:
location = /favicon.ico { try_files /favicon.ico =404; } - 健康检查端点:
location = /health { return 200 "healthy"; } - 防止目录遍历:
location = /config.json { deny all; } - 重定向特定旧路径:
location = /old-page { return 301 /new-page; }











