从零学nginx-location配置及匹配规则教程
1. 配置语法
1.1. =: 严格匹配,只有完全一样的才能匹配上,这里有一些要注意:
1. 严格匹配如果需要匹配一个文件的时候,需要将路径具体到这个文件,不能使用index进行拼接
2. 如果匹配的是一个文件夹,在最后最好要加一个/(浏览器会为你的url添加一个/,导致匹配不上),否则会404
1.2. 无修饰符: 最大前缀的匹配,和配置文件中的顺序无关
,取匹配度最高的配置,例如:
location /a{
resource1
}
location /a/b{
resource2
}
当url为a/b/c的时候,访问的是resource2
1.3. ^~:进行前缀匹配,例如:
location ^~ /a/{
resource
}
只要访问的url是/a开头即可访问当resource
1.4. ~:大小写敏感正则匹配,匹配优先级和配置中的顺序有关
1.5. ~*:大小写不敏感正则匹配,匹配优先级和配置中的顺序有关
1.6. @:接收其他location规则的重定向
2. 匹配优先级策略
- 使用=的严格匹配优先级最高,如果匹配上了,就直接返回,且和配置顺序无关
- 无符号匹配和使用^~的匹配效果是一样的,以最大前缀为优先,和配置顺序无关
- 无符号匹配和使用~的匹配的一个异常点是:如果使用~匹配上了,就不会尝试正则进行匹配覆盖结果,但是无符号匹配会:
location ^~ /a/{
resource1
}
location ~ /a/{
resource2
}
结果:/a -->resource1
location /a/{
resource1
}
location ~ /a/{
resource2
}
结果:/a -->resource2
4. 如果多个正则都满足,那根据配置的顺序来决定结果
举例:
location =/a/{
resource1
}
location /a/b{
resource2
}
location ^~ /a/b/c{
resource3
}
location ~ /b{
resource4
}
location /c/d{
resource5
}
location /c/d/e{
resource6
}
结果如下:
/a --> resource1
/a/b --> resource4
/a/b/c --> resource3
/c/d/e --> resource6