location 匹配规则
约 637 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Nginx › 静态资源服务(在新窗口打开) › location 匹配规则
location 是 Nginx 最核心的指令之一,决定了请求 URI 与哪个配置块匹配。
匹配修饰符
location = /exact { # 精确匹配
# 只有 /exact 匹配
}
location ^~ /prefix/ { # 前缀优先匹配
# 匹配以 /prefix/ 开头的 URI
# 匹配后不再检查正则
}
location ~ \.php$ { # 正则匹配(区分大小写)
# 匹配 .php 结尾的 URI
}
location ~* \.(jpg|png)$ { # 正则匹配(不区分大小写)
# 匹配 jpg/png 结尾的 URI
}
location / { # 普通前缀匹配(最后兜底)
# 匹配所有以 / 开头的 URI
}匹配优先级
优先级顺序(从高到低):
=精确匹配(优先级最高)^~前缀匹配(匹配后终止后续正则检查)~/~*正则匹配(按配置文件中的出现顺序)- 普通前缀匹配(最长匹配优先,无
^~)
示例
server {
location = / {
# ① 精确匹配 "/"
return 200 "Exact root";
}
location = /login {
# ② 精确匹配 "/login"
return 200 "Login page";
}
location ^~ /static/ {
# ③ 前缀匹配 /static/*
root /var/www/static;
}
location ~ \.php$ {
# ④ 正则:所有 PHP 文件
fastcgi_pass php-backend;
}
location ~* \.(jpg|png|gif|ico|css|js)$ {
# ⑤ 正则:静态资源(5 秒缓存)
expires 5d;
}
location / {
# ⑥ 兜底:所有其他请求
try_files $uri $uri/ /index.html;
}
}常见陷阱
# 陷阱 1:正则顺序影响结果
# ~ 和 ~* 按文件顺序匹配,第一个匹配的生效
location ~ \.php$ { ... } # 先匹配到 PHP
location ~ /admin/ { ... } # 后匹配 /admin/
# /admin/index.php 会命中第一个规则(PHP)
# 陷阱 2:普通前缀不会终止正则搜索
location /forum/ { ... } # 最长前缀匹配
location ~ \.php$ { ... } # 正则也会检查
# /forum/thread.php → 匹配 /forum/ 前缀,但仍检查正则
# 最终命中 \.php$ 正则(如果正则匹配)小结
- location 按
=→^~→ 正则(~/~*)→ 普通前缀的顺序匹配。 =精确匹配优先级最高,适合首页等单一路径。^~在前缀匹配后跳过正则检查,适合 API 前缀等静态不变路径。- 正则按出现顺序匹配,第一个匹配的生效。
- 普通前缀取最长匹配,但不跳过正则检查。
上一节:root 与 alias 下一节:index、try_files 与目录列表
