nginx 的 location 精准匹配使用 = 前缀,例如 location = /path。它会精确匹配请求 uri,忽略查询参数,且优先级最高。配置后 nginx 会立即停止搜索其他规则并返回结果。

如何区分精准匹配与普通前缀匹配
普通前缀匹配(如 location /path)会匹配以该路径开头的所有 URI,而精准匹配只接受完全一致的字符串。当存在多个匹配时,Nginx 优先选择最长前缀匹配,但精准匹配例外,它直接胜出。

server {
listen 80;
server_name example.com;
# 精准匹配:仅匹配 /api/health
location = /api/health {
return 200 'OK';
}
# 前缀匹配:匹配 /api/ 开头的所有请求
location /api/ {
proxy_pass http://backend;
}
}
精准匹配对查询参数的处理方式
精准匹配在比较 URI 时不包含查询参数。即使请求带有参数,只要路径部分一致,依然命中精准匹配。这意味着 /path?foo=bar 会被 location = /path 捕获。

server {
listen 80;
server_name example.com;
location = /search {
# 无论是否带参数,只要路径是 /search 就进入这里
echo "Exact match triggered";
}
location /search {
# 只有不带参数或路径不完全一致时才可能到这里
echo "Prefix match triggered";
}
}
基于 location = /static/logo.png 的具体行为
当配置 location = /static/logo.png 时,只有请求 URI 严格等于 /static/logo.png 才会触发。如果请求是 /static/logo.png?v=1,由于包含查询参数,Nginx 仍认为路径部分匹配,因此也会命中精准匹配。但如果请求是 /static/logo.png.bak,则不会命中,因为字符串不完全一致。











