Nginx 的路径匹配规则是其配置中的核心机制,主要通过 location
指令实现。以下是详细的规则解析和优先级说明:
Nginx 的路径匹配分为 精确匹配、前缀匹配、正则匹配 和 通用匹配,优先级依次降低。
=
)location = /path { ... }
nginx
location = /login {
# 仅匹配 /login,不匹配 /login/ 或 /login.html
proxy_pass http://backend;
}
普通前缀匹配 (/path
):
location /prefix { ... }
/prefix
开头的路径(最长匹配原则)。location /static/ {
# 匹配 /static/a.html、/static/images/logo.png 等
alias /data/static/;
}
^~ 强制前缀匹配:
location ^~ /prefix { ... }
/prefix
开头的路径,且阻止后续正则匹配。location ^~ /images/ {
# 匹配 /images/logo.png,但不检查后续正则
root /data;
}
~
或 ~*
)区分大小写 (~
):
location ~ \.php$ {
# 匹配 /index.php,但不匹配 /index.PHP
fastcgi_pass php:9000;
}
不区分大小写 (~*
):
location ~* \.(jpg|png)$ {
# 匹配 /logo.JPG 和 /icon.png
expires 30d;
}
/
)location / { ... }
nginx
location / {
# 兜底规则(最低优先级)
try_files $uri $uri/ /index.html;
}
从高到低排序:
1. 精确匹配 (=
) → 2. 强制前缀匹配 (^~
) → 3. 正则匹配 (~
/~*
) → 4. 普通前缀匹配 → 5. 通用匹配 (/
)
/
) 的影响location /dir
会匹配 /dir
和 /dir/
。nginx
location /dir/ {
# 仅匹配以 /dir/ 开头的路径
}
^~
或 =
优化。alias
与 root
的区别root
会拼接完整路径(root + location
):
nginx
location /static/ {
root /data; # 文件路径: /data/static/a.jpg
}
alias
直接替换路径:
nginx
location /static/ {
alias /data/; # 文件路径: /data/a.jpg
}
echo
模块或日志打印匹配结果:
nginx
location /test {
add_header X-Matched $uri;
return 200 "Matched: $uri";
}
nginx -T
检查配置完整性。掌握这些规则后,可以高效配置 Nginx 实现精确的路由控制。遇到复杂场景时,建议通过优先级顺序逐步验证匹配逻辑。