您的位置:首页 > 运维架构 > Nginx

高性能Web服务器Nginx的配置与部署研究(16)小议

2012-06-20 22:06 866 查看
转载于:/article/1359479.html

location匹配模式优先级

Author: 柳大·Poechant(钟超)

Email: zhongchao.ustc#gmail.com(#->@)

Blog: Blog.CSDN.net/Poechant

Date: June 20th, 2012


1 location 的匹配符


1.1 等于匹配符:
=

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

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


1.2 空匹配符

空匹配符的特点是:

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


1.3 正则匹配符:
~

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

~*
表示:
不区分大小写的正则匹配

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


1.4 内部访问符:
@

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


2 匹配符优先级

=


空匹配符,满足精确匹配时
^~


~
~*


空匹配符,满足以指定模式开始时的匹配时

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


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

看下面的例子(用到我们此前一起完成的
Hello
World
模块):
location /poechant {
hello_world no1;
}

location = /poechant {
hello_world no2;
}

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

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


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

下面这个例子中,两者开始都精确匹配了,连这个正则匹配都是精确匹配。
location ^~ ^/poechant$ {
hello_world no1;
}

location /poechant {
hello_world no2;
}

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

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


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


-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐