Nginx的location
指令用于匹配请求的URI,其匹配规则非常灵活且优先级明确。以下是详细的匹配规则和优先级说明:
location [修饰符] 匹配模式 {
# 配置内容
}
location = /path
nginx
location = /login {
# 仅匹配 /login,不匹配 /login/ 或 /login?param=1
}
普通前缀匹配:
location /path
location /static/ {
# 匹配 /static/a.html、/static/images/logo.png 等
}
^~ 强制前缀匹配:
location ^~ /path
location ^~ /images/ {
# 匹配 /images/logo.png,但即使有正则规则 /img.*\.png 也不会检查
}
区分大小写(~):
location ~ /pattern/
location ~ \.php$ {
# 匹配 /index.php,但不匹配 /INDEX.PHP
}
不区分大小写(~*):
location ~* /pattern/
location ~* \.(jpg|png)$ {
# 匹配 /img.jpg 和 /IMG.PNG
}
location /
nginx
location / {
# 默认处理所有请求
}
匹配优先级从高到低依次为:
1. 精确匹配(=
)
→ 最高优先级,直接命中后停止搜索。
2. 强制前缀匹配(^~
)
→ 命中后不检查正则表达式。
3. 正则表达式匹配(~
或~*
)
→ 按配置文件中的书写顺序匹配,先匹配到的生效。
4. 普通前缀匹配
→ 选择最长匹配的路径,若最长路径无^~
修饰符,则继续检查正则。
5. 通用匹配(/
)
→ 默认兜底。
location = / {
# 规则1:精确匹配首页
}
location ^~ /static/ {
# 规则2:强制匹配/static/开头
}
location ~ \.html$ {
# 规则3:匹配所有.html文件
}
location / {
# 规则4:通用匹配
}
/
→ 命中规则1。/static/logo.png
→ 命中规则2(跳过正则检查)。/about.html
→ 命中规则3。/unknown
→ 命中规则4。^~
或=
减少正则检查。/path
和/path/
是不同的URI。掌握这些规则后,可以精准控制Nginx的路由逻辑。如果需要更复杂的场景(如嵌套location或变量匹配),可进一步结合rewrite
指令使用。