概述
一、官方描述
nginx官方文档给出location语法如下:
location [=|~|~*|^~] uri {
.......
}
方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式
uri是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准uri";也可以包含正则,这种模式被称为"正则uri"
分类 | 标识符 | 描述 |
精确匹配 | = | 用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该location里面的请求。 |
一般匹配 | 无 | 普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。 |
^~ | 非正则匹配;用于标准uri前,nginx服务器匹配到前缀最多的uri后就结束,该模式匹配成功后,不会使用正则匹配。 | |
正则匹配 | ~ | 用于正则uri前,表示uri里面包含正则,并且区分大小写。 |
~* | 用于正则uri前,表示uri里面包含正则,不区分大小写。 |
补充:
1、针对~和~*匹配标识符,可以在前面加上!来取反
!~ 表示正则不匹配,区分大小写
!~* 表示正则不匹配,不区分大小写
2、/ 通用匹配,任何请求都会匹配到
二、匹配顺序
注意:
1、只有 = 是精准匹配,不会被正则覆盖
2、一般匹配,即使是完全匹配,也不是精准匹配
2.1 测试精准匹配
location1是正则匹配,location2是一般匹配,location3是精准匹配
当我们以http://172.17.0.2/a/b/c访问时,虽然1,2,3都会被命中,但是执行location3,屏幕输出“jing zhun”
2.2 测试一般匹配
同样是三个location,当我们以http://172.17.0.2/a/b/c去访问时,虽然1,2,3都会被命中,但是执行location3(最长匹配),屏幕输出“a/b/c”
2.3 测试正则匹配
我们在2.2基础上,再加一条location
当我们以http://172.17.0.2/a/b/c去访问时,虽然安装一般匹配的规则,1,2,3,4都会被命中,但最终还是被4覆盖,执行location4,屏幕输出“zheng ze”
但是正则匹配不会覆盖精准匹配和一般匹配中的非正则匹配
精准匹配不会被覆盖很好理解,我们来测试一下 一般匹配中的非正则匹配
把location3修改为非正则匹配,当我们以http://172.17.0.2/a/b/c去访问时,屏幕输出“a/b/c”
而且注意:如果有多个正则都满足,从上往下,匹配到第一个正则就会返回,不会继续往下匹配
最后
以上就是无奈仙人掌为你收集整理的Nginx基础(3)—— Location语法一、官方描述二、匹配顺序的全部内容,希望文章能够帮你解决Nginx基础(3)—— Location语法一、官方描述二、匹配顺序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复