nginx, nginx的位置正则匹配是怎样的?不知道小伙伴们今天来看看边肖的分享吧!
位置可以分为两种:正常配置和常规匹配。
一、总体配置
普通位置根据使用方法分为两种,格式如下:
1. location/{
指令序列
}
解释:括号中定义的表示对当前路径和子路径下的所有对象都有效。"最低优先级"
所有用户的请求都可以由它来匹配。
示例:
location/{
root /web;
对应策略
}
这意味着网页的根目录在/web中。
你访问的时候直接去http://127.0.0.1或者域名就行了。
所有用户的请求都可以由它来匹配。
location /bbs {
root /web;
对应策略
}
这意味着网页的根目录位于/web/bbs。
访问的时候直接去http://127.0.0.1/bbs就可以了。
当用户访问时
http://127.0.0.1/bbs/
或者
http://127.0.0.1/bbs/subpath
只能用上面的路径来匹配。
问题:当用户访问http://127.0.0.1/bbs/a.html时,
当这两个位置同时存在时,如下所示,哪个配置将生效?
server {
listen 80;
server_name www.benet.com;
index index.html;
location/{
root /web;
}
location /bbs {
root /web;
}
结论是,
当用户请求的URL(/BBS)同时匹配两个位置时,
最大前缀生效(位置/bbs生效)
如果本段第一段(位置/bbs)不生效。
第一段相当于默认策略,因为location/包含所有请求,所有请求都以“/”开头。
2. Location=/Path {
指令序列
}
解释:括号中定义的表示对当前路径有效,但对子路径无效(与指定路径完全匹配的不包括子路径)。“它有最高优先权。”
示例:
location=/prefix {
}
也就是说,访问www.benet.com/prefix的用户可以通过上面的位置进行匹配,它只匹配/前缀。
/下的子路径不匹配。
访问www.benet.com/prefix/a的用户无法与之匹配。
最高优先级:表示一旦匹配到该位置,立即生效。其他位置无论是否符合要求都不会生效。
示例:
location /prefix/{
root /;
}
location=/prefix/{
return 500;
}
第二,常规匹配
常规匹配也分为两种:
1. location ~ URI {}
~匹配文件区分大小写。
2. Location ~* URI {}:
~ *匹配文件不区分字符。
正则匹配按照正则位置写的顺序生效,一旦匹配成功,将停止匹配到后续位置。
示例:
location ~ /bbs {
return 400;
}
location ~* /bbs {
return 500;
}
网页返回错误消息400。
然后切换配置的两个部分。
location ~* /bbs {
return 500;
}
location ~ /bbs {
return 400;
}
三。匹配订单和有效订单
匹配顺序和有效顺序是两个概念。
当配置中有多个位置,并且既有正常位置又有常规位置时,则
1,匹配顺序是:
用户请求的URL
(1)先匹配普通位置。
普通位置根据编辑顺序匹配。
(2)在匹配规则的位置
常规位置匹配时按照编辑顺序进行匹配。
但是,常规位置和普通位置在编辑顺序上不匹配。
2、生效顺序
当普通和正则都存在的情况下,遵循以下原则
1.nginx开始按照编辑顺序依次匹配普通location
(1)如果匹配过程中匹配到了
location=:nginx会立即生效即停止后续的匹配
(2)如果没有locaiton=话,
如果匹配到locatin ^~。会停止后续的正则匹配
然后最大前缀locaiton生效
最后是location/生效
(3) 如果以上两种location都不存在的话
nginx会匹配所有location后看后续有没有正则locaion
如果后续没有正则locaiton
然后最大前缀locaiton生效
最后是location/生效
如果后续还有正则location
一旦匹配成功一条正则locaion,这条会生效,并且会停止后续的正则匹配,还会会覆盖前边的普通location结果
nginx,以上就是本文为您收集整理的nginx最新内容,希望能帮到您!更多相关内容欢迎关注。