从零学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. 匹配优先级策略

  1. 使用=的严格匹配优先级最高,如果匹配上了,就直接返回,且和配置顺序无关
  2. 无符号匹配和使用^~的匹配效果是一样的,以最大前缀为优先,和配置顺序无关
  3. 无符号匹配和使用~的匹配的一个异常点是:如果使用~匹配上了,就不会尝试正则进行匹配覆盖结果,但是无符号匹配会:
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
发布了81 篇原创文章 · 获赞 16 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/mazhen1991/article/details/101103013