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 实现精确的路由控制。遇到复杂场景时,建议通过优先级顺序逐步验证匹配逻辑。