欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
CentOS + Nginx 如何自动申请部署Let's Encrypt免费SSL证书 如何避免发布EXE失败、误报,以及微软windows defender误报提交方法
未知  nginx配置中location匹配顺序优先级的问题
[ 发布日期:12个月前 (12-03) ]   [ 来自:本站原创 ] [分类:其它运维与编程]
有时候一个url可能会和Location中的多个规则匹配上,那么它们的优先级就非常重要了。
如果没有处理好优先级就可能会造成安全漏洞。
如:本来打算禁止的访问被其它规则匹配上放行了。

location的匹配规则大概分三大类
  1. =开头表示精确匹配,只有完全匹配上才能生效。
  2. 普通字符匹配。只要Url包含匹配前缀字符就行。
  3. 正则表达式匹配。

location匹配顺序的优先级如下:


  1. "="前缀指令匹配,如果匹配成功,则停止其他匹配。这优先级最高
  2. ^~ 前缀的普通字符串匹配。匹配成功后停止其它匹配。
  3. 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
  4. 普通字符串指令匹配,顺序是从长到短。(长的包含短的,以长的优先)

注意点


普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,nginx会根据配置的长短来进行匹配。
但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。

匹配模式写法,和顺序


  • location = /test    =开头表示精确匹配,只有完全匹配上才能生效。
  • location ^~ /test    ^~ 开头对URL路径进行前缀匹配。
  • location ~ pattern     ~开头表示区分大小写的正则匹配。
  • location ~* pattern   ~*开头表示不区分大小写的正则匹配。
  • location /test       不带任何修饰符,也表示前缀匹配。
  • location /         保底匹配,任何未匹配到其它location的请求都会匹配到




引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/288
复制引用地址https://www.rickw.cn/trackback/288/GBK
[ 分类:其它运维与编程  | 查看:590 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5