nginx配置中的location匹配规则并不是完全安照顺序匹配的

原创 创建时间:2019-01-04 访问量:167 赞:0 踩:0

1、Nginx中的匹配规则介绍:

示例:

location [=|~|~*|^~] /uri/ {...}
 符号含义 
 =   以=开头表示精确匹配
 ^~ 以^~开头表示以某个uri常规字符串开头,就是以/uri/开头的请求路径,nginx不对url做编码,即/a20%b就是匹配/a b匹配到,注意a b之间是个空格
 ~ 以~开头表示正则匹配,区分大小写
 ~* 以~*开头的表示正则区配,不区分大小写
 / 匹配所有请求

2、多个location的配置时,匹配的次序如下所示:

  • 最先匹配 = ,不管写在哪里
  • 其次匹配 ^~,不管写在哪里
  • 再次以~或~*这两个开头的符号,以配置的顺序进行匹配
  • 前面都没有匹配到的都被 / 匹配

3、举一个容易产生错误的例子

本意是,如果是对http://www.demo.com/images/xxxx.png这个请求匹配 location /images {...}  这个location,而对于http://www.demo.com/**/yyy.png(**表示任意层级的非images的路径)这个请求匹配location ~* \.(html|png|jpg)$ {...},但实际上下面的方式是做不到的。

location /images {...}
location ~* \.(html|png|jpg)$ {...}
location / {...}

上面错以为/images写在最前面就是最先匹配了。其实它是先匹配location ~* \.(html|png|jpg)$ {...}这个的,而/images或/是按顺序匹配的。

所以要实现以上目的,需要改成以下配置:

location ^~ /images {...}
location ~* \.(html|png|jpg)$ {...}
location / {...}

这样就可以保证location ^~ /images {...}规则最先匹配,就不会导致找不到图片的情况了。

更多关于nginx配置中的location匹配规则并不是完全安照顺序匹配的请访问:
相关资源列表:
更多资源请访问:
评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com