Nginx http 模块

来源:百度文库 编辑:神马文学网 时间:2024/04/24 11:59:57

location

语法:location [=\~\~*\^~] /uri/ {… ... }

默认值:no

Contextserver

这个指令允许为不同的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