标签:区分 物理 就是 body 精确 header 最大 的区别 目录
目录
语法 | 匹配规则 |
---|---|
空 | 普通匹配(遵循最大前缀匹配规则, 优先度比正则低) |
= | 精确(严格)匹配 |
^~ | 非正则匹配(依然遵循最大前缀匹配规则) |
~ | 表示区分大小写的正则匹配 |
~* | 表示不区分大小写的正则匹配 |
!~ 和 !~* | 别为区分大小写不匹配及不区分大小写不匹配 的正则 |
/ | 通用匹配,任何请求都会匹配到 |
只有两类:正则location和普通location
~
和 ~*
为正则location
=
、^~
、@
和无任何前缀的都属于普通location,另外,@
是用作服务端内部的一种转发行为,很少用,在此不做讨论。
location /a/{}
,location /a/b/ {}
,请求 http://a/b/c.html 匹配的是 location /a/b/ {}
综上,常规的顺序是匹配完普通location,还要继续匹配正则location,但是,也可以告诉nginx,匹配到了普通location,就不要再搜索匹配正则location了,通过在普通location前面加上^~
符号,^
表示非,~
表示正则,^~
就是表示不要继续匹配正则。
除了^~
,=
也可阻止nginx继续匹配正则,区别在于^~
依然遵循最大前缀匹配规则,而=是严格匹配
location / {}
和 location =/ {}
的区别/ {}
作为普通匹配,是遵循最大前缀匹配原则的,所以,对于一个url,如果有更特殊合适的匹配,就选特殊合适的,如果没有更特殊合适的匹配,也有 / {}
兜着,就像是默认配置一样
=/ {}
遵循的是严格匹配规则,只能匹配到 http://ip:port/,同时会停止搜索正则匹配。
location ~* /a {
return 999;
}
直接reuturn 某个数字, 该数字会作为返回的http 状态码(自行F12打开开发者工具查看)
标签:区分 物理 就是 body 精确 header 最大 的区别 目录
原文地址:https://www.cnblogs.com/youjiaxing/p/10084357.html