规则语法
![ed0981ae8c1fd7127e3483b87bb57d27.png](https://i-blog.csdnimg.cn/blog_migrate/b6e49519a36fb71a75e36e9959971464.png)
!~
和!~*
分别为区分大小写不匹配及不区分大小写不匹配 的正则, 但是是用于条件判断的时候(即if
语句)
if ($host !~* "^www.") { # ... }
匹配简单来说:
- 优先匹配
=
精确匹配, 若未匹配到则转下一步骤 - 依照最大前缀匹配规则, 先匹配普通规则(
空
,^~
)
若最终匹配到^~
, 则使用
若匹配到空
或 未匹配到, 则转下一步骤(当前匹配结果暂时保存) - 按照物理存储顺序, 若匹配到任意一条正则, 马上使用(无视后面正则)
若未匹配到任意正则, 则使用步骤2中匹配到普通正则
location 分类
只有两类:正则location和普通location
~
和 ~*
为正则location=
、^~
、@
和无任何前缀的都属于普通location,另外,@
是用作服务端内部的一种转发行为,很少用,在此不做讨论。
匹配顺序:
- 先普通,再正则
- 普通location之间的匹配顺序:按最大前缀匹配
如location /a/{}
,location /a/b/ {}
,请求 http://a/b/c.html 匹配的是location /a/b/ {}
- 正则location之间的匹配顺序:按配置文件中的物理顺序匹配,只要匹配到一条正则,就不再考虑后面的
- 若普通location匹配到 精确匹配
=
或 非正则匹配