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. 匹配最长的文本字符并记录,然后进行正则匹配,若存在正则匹配,匹配第一个结束,若不存在则匹配最长文本字符的路径。



原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/274324.html

(0)
上一篇 2022年7月14日
下一篇 2022年7月14日

相关推荐

发表回复

登录后才能评论