Nginx http 模块
来源:百度文库 编辑:神马文学网 时间:2024/04/24 11:59:57
location
语法:location [=\~\~*\^~] /uri/ {… ... }
默认值:no
Context:server
这个指令允许为不同的uri指定不同的配置。 此指令可以使用常规字符串或者正则表达式来进行配置。如果使正则表达式就不必须使用”~*”进行不区分大小写的匹配,使用”~”进行区分大小写的匹配
在确定哪个location匹配一个特定的查询时,首先检查是常规的字符串。常规字符串匹配一个请求的开始部分,而且是大小写敏感的(最明确的匹配方式)。然后才进行正则表达式的匹配,匹配顺序按照其在配置文件中列出的顺序。找到第一个匹配查询正则表达式后,此搜索停止。如果没有匹配到任何正则表达式就使用常规字符串匹配的结果。
对于以上的行为可以有两种方法进行修改。第一种是使用“=”符号,“=”仅仅匹配以个精准的query,如果query匹配了,停止搜索,立即处理请求。比如,如果对”/”的请求很频繁,那么使用“location = / ”进行匹配方式就会加速请求的处理。
另外一种方法是使用“^~”符号,他采取的是首先匹配常规字符串,如果匹配成功就不再进行正则表达式的匹配,例如,“location ^~ /images/”当query以“/images/”开头的话,就会停止搜索。不会匹配任何正则表达式
此外需要特别注意的是Nginx不会对编码后的URL进行比较,所以如果你有“/images/%20/test/”这样一个URL则使用“/images/ /test”确定使用哪个location.
location进行检查顺序
1. 使用“=”的指令精确匹配查询。如果匹配成功,搜索结束。
2. 所有属于常规字符串的检查,进行最长匹配的原则。如果使用的是“^~”,字符串匹配成功后匹配搜索结束。
3. 正则表达式的匹配顺序以配置文件中列出的顺序为准。
4. 如果第三步,匹配成功使用此结果,否则使用第二步的结果。
e.g.
locatiodn = / {
#进匹配“/”
Conf A
}
Location / {
#匹配所有以“/”开始的查询,但优先选择更长一点的匹配结果
Conf B
}
Location ^~ /images/ {
#匹配所有以/imges/开始的查询,且不查询正则表达式
Conf C
}
Location ~* \.(gif|jpg|jpeg)$ {
#匹配所有以.gif ,.jpg , .jpeg结尾的请求,但是前面不能有”/images/”,因为那些请求将被定位到上一个location
Conf D
}
Example requests
/ -> conf A
/documents/document.html -> conf B
/images/1.gif -> conf C
/documents/1.gif -> conf D