nginx——location 优先级
一、 location 的匹配符
1.等于匹配符:=
等于匹配符就是等号,特点可以概括为两点:
精确匹配
不支持正则表达式
2.空匹配符
空匹配符的特点是:
匹配以指定模式开始的 URI
不支持正则表达式
3.正则匹配符:~
正则匹配符是可以使用正则表达式的匹配符。不过这里要强调的是,
一般来说~是指:区分大小写的正则匹配
而~*表示: 不区分大小写的正则匹配
但是对于一些对大小写不敏感的操作系统,这两者没有区别。
^~表示只匹配字符串,不查询正则表达式
二、优先级的实例
location ~ ^/poechant$ {
return ;
}
location =/poechant {
return ;
}
结果显示 403 forbdden
location ~ ^/poechant$ {
return ;
}
location /poechant {
return ;
}
结果显示 400 Bad Request
根据以上可以大体判断了解 location的优先级别以及流程。
还需要验证是不是事实
1、首先精确匹配 也就是带着 =的location 找到之后直接结束解析过程并返回。
2、其次匹配普通匹配,并记录最长的匹配,此时首先不返回。匹配最长的。
3、再匹配正则表达式,以~开始的,正则表达式,按照顺序从上到下匹配,找到匹配之后立即返回,没有匹配到则返回普通匹配的最长的匹配。如果普通匹配没有匹配到页面,则返回 404 not found。
优先级别 精准匹配 = >正则匹配 >普通匹配(比如 /a /a/1.jpg 等 包括 ^~表示之匹配字符串不查询正则表达式)
#
location / {
return ;
} #
#location /a/ {
# return ;
#} #
location ~* \.jpg$ {
return ;
} #
location ~ ^/a/ {
return ;
} #
location ^~ /a/ {
return ;
} #
location /a/.jpg {
return ;
} #
location = /a/.jpg {
return ;
}
测试的时候,先要将#2全部注释掉,不然会认为#2 与#4 完全一样。会提示:重复配置,提示如下
[emerg]: duplicate location "/a/" in D:\nginx-0.8./conf/nginx.conf:
每一次都访问 localhost:8080/a/1.jpg
第一次访问 说明匹配 #7 精准匹配
把7注释掉 然后访问 说明 3正则匹配匹配成功
接下来互换3跟4
#
location ~ ^/a/ {
return ;
} #
location ~* \.jpg$ {
return ;
}
再一次访问 说明正则表达式 是按照从上往下的顺序匹配的 匹配成功就停止 同时也验证了 匹配的顺序是 首先 匹配普通匹配 并记录最长的匹配 然后匹配正则表达式 ,找到之后
停止匹配。
把 3、4注释掉 访问 匹配 6成功 普通匹配匹配最长的
注释掉 6之后 匹配5成功 ^~ 以指定的 模式开始的
nginx——location 优先级的更多相关文章
- nginx location优先级
目录 1. 配置语法 2. 配置实例 3. 总结: 网上查了下location的优先级规则,但是很多资料都说的模棱两可,自己动手实地配置了下,下面总结如下. 1. 配置语法 1> 精确匹配 lo ...
- nginx location 优先级
location 顺序/优先级: location = > location 完整路径 > location ^~ 路径 > location ~,~* 正则顺序 > ...
- nginx location在配置中的优先级
location表达式类型 ~ 表示执行一个正则匹配,区分大小写~* 表示执行一个正则匹配,不区分大小写^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location.= 进行普通 ...
- NGINX location 在配置中的优先级
location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进 ...
- Nginx——location匹配与在配置中的优先级
1. location表达式类型 location ^~ /api/v7/ { proxy_next_upstream http_404 http_500 http_502 http_503 http ...
- (转)nginx location在配置中的优先级
原文:https://www.bo56.com/nginx-location%E5%9C%A8%E9%85%8D%E7%BD%AE%E4%B8%AD%E7%9A%84%E4%BC%98%E5%85%8 ...
- nginx location的优先级
原来一直以为location的优先级是先后顺序,结果有次项目中傻眼了,赶紧百度一下,下面的内容参考了这个链接 location表达式类型 ~ 表示执行一个正则匹配,区分大小写~* 表示执行一个正则匹配 ...
- nginx location配置
nginx location配置 location在nginx中起着重要作用,对nginx接收到的请求字符串进行处理,如地址定向.数据缓存.应答控制.代理转发等location语法location ...
- nginx location匹配规则
谢谢作者的分享精神,原文地址:http://www.nginx.cn/115.html location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写~* #表示执行一个正则匹 ...
随机推荐
- hdoj 1342 Lotto【dfs】
Lotto Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Windows 安装Django并创建第一个应用
学习python 也有一段时间了,语法也学得差不多了,突然就想学一学python的web开源开源框架Django,我用的是Django-1.6.2.tar.gz,可以在官网https://www.dj ...
- java James
使用JavaMail发送电子邮件(案例) 需求: 使用JavaMail技术,实现从A账户给B账户发送一封电子邮件,标题为"会议通知",邮件内容为"XX你好!请于明天下午1 ...
- 53个要点提高php效率
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说 ...
- 用python 装饰器打log
# coding=utf-8 from time import time def logged(when): def log(f,*args,**kargs): prin ...
- 【设计模式 - 13】之责任链模式(Chain Of Responsibility)
1 模式简介 责任链模式的简介: 1. 责任链模式为请求创建了一个接收者对象的链,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一 ...
- 【设计模式 - 15】之解释器模式(Interpreter)
1 模式简介 解释器模式允许我们自定义一种语言,并定义一个这种语言的解释器,这个解释器用来解释语言中的句子.由于这种模式主要用于编译器的编写,因此在日常应用中不是很常用. 如果一种特定类型的 ...
- 基于xmpp openfire smack开发之smack类库介绍和使用[2]
http://blog.csdn.net/shimiso/article/details/8816540 关于Smack编程库,前面我们提到,它是面向Java端的api,主要在PC上使用,利用它我们可 ...
- 计算机体系结构-CPU
NUMA
- Java NIO——Selector机制源码分析---转
一直不明白pipe是如何唤醒selector的,所以又去看了jdk的源码(openjdk下载),整理了如下: 以Java nio自带demo : OperationServer.java Oper ...