微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nginx的匹配规则顺序问题

Nginx的匹配规则 location 分为两部分 前缀 和 文字字符  两部分

 

如: 

location = /hello { 
  }
"=" 就是前缀
"/hello" 就是字符

 

一个例子来说明匹配顺序,

Nginx的配置信息是这样的: 

1.location  =  / {

...

}

2.location    /hello {

...

}

3. location    /hello/abc {

...

}

4.location   ~*  /hello {

...

一、访问 / 时  这时精准匹配了 配置  1

二、访问  /hello和/hello/abc都会匹配到配置4

(因为在访问/hello路径时,最长匹配到/hello的location,这是记录改location,然后进行正则匹配,找到配置4的location进行匹配,如果不存在配置4则匹配配置2)

  (在访问/hello/abc也是一样的匹配规则,先记录配置3在进行正则匹配到配置4)

如果想让 配置2直接匹配/hello,那么可以通过在配置2中加入前缀  “ ^~ ”  ,  这样在匹配到配置2的时候就直接匹配了,不会走正则。

 

总结:

1.首先检查文字字符串,如果访问路径匹配到对应的文字字符,且前缀为 “ = ”,匹配并结束。

2. 如果匹配的路径有前缀 "^~", 匹配并结束。

3. 匹配最长的文本字符并记录,然后进行正则匹配,若存在正则匹配,匹配第一个结束,若不存在则匹配最长文本字符的路径。



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐