高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级

释放双眼,带上耳机,听听看~!

高性能Web服务器Nginx的配置与部署研究(16)小议location匹配模式优先级

  • Author: 柳大·Poechant(钟超)
  • Email: zhongchao.ustc#gmail.com(#->@)
  • Blog: Blog.CSDN.net/Poechant
  • Date: June 20

th, 2012

1 location 的匹配符

1.1 等于匹配符:=

等于匹配符就是等号,特点可以概括为两点:

  1. 精确匹配
  2. 不支持正则表达式

1.2 空匹配符

空匹配符的特点是:

  1. 匹配以指定模式开始的 URI
  2. 不支持正则表达式

1.3 正则匹配符:~

正则匹配符是可以使用正则表达式的匹配符。不过这里要强调的是,一般来说~是指:


1
2
3
1区分大小写的正则匹配
2
3

而~*表示:


1
2
3
1不区分大小写的正则匹配
2
3

但是对于一些对大小写不敏感的操作系统,这两者没有区别。另外一个就是^~,其表示以指定模式开始的正则匹配。

1.4 内部访问符:@

一般用于错误页面等,这个暂不讨论。

2 匹配符优先级

  1. =
  2. 空匹配符,满足精确匹配时
  3. ^~
  4. *
  5. 空匹配符,满足以指定模式开始时的匹配时

这样说比较抽象,我们来看例子吧。

2.1 等于匹配符与精确匹配时的空匹配符

看下面的例子(用到我们此前一起完成的Hello World模块):


1
2
3
4
5
6
7
8
9
1location /poechant {
2    hello_world no1;
3}
4
5location = /poechant {
6    hello_world no2;
7}
8
9

如果我们的请求是http://my.domian/poechant,则我们发现两个location都与请求的 URI 匹配,这时根据我们的优先级顺序,第一个是精确匹配时的空匹配符,第二个是等于匹配符,所以第二个的优先级高,也就是应该输出:


1
2
3
1hello_world, no2
2
3

同时也说明 Nginx 的 locatoin 不是按照配置文件中的书写顺序来匹配的。

2.2 精确匹配时的空匹配符与正则匹配的^~

下面这个例子中,两者开始都精确匹配了,连这个正则匹配都是精确匹配。


1
2
3
4
5
6
7
8
9
1location ^~ ^/poechant$ {
2    hello_world no1;
3}
4
5location /poechant {
6    hello_world no2;
7}
8
9

匹配哪一个?你测试一下,会得到:


1
2
3
1hello_world, no2
2
3

与我们上面说的优先级顺序相吻合。

2.3 其他匹配优先级比较的实例

柳大·Poechant:Blog.CSDN.net/Poechant

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索