首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

nginx location 婚配顺序

2012-07-16 
nginx location 匹配顺序location?匹配的原型是这样的:location?[|~|~*|^~|@] /uri/ { … }“”是精确匹配“

nginx location 匹配顺序

location?匹配的原型是这样的:location?[=|~|~*|^~|@] /uri/ { … }

“=”是精确匹配
“@”是命名的location?,在正常的location?匹配中不会使用,仅仅在内部跳转中才会使用到。
“~”是区分大小写的匹配
“~*”是不区分大小写的匹配
“^~”表示中止正则匹配(这个平时没太注意)

在一个请求中,匹配的顺序是这样的。先使用所有location?来匹配URI的开始部分,最精确匹配的(形象点说,就是即配置字符数最多的)为最后匹配结果;然后进行正则表达式的匹配,按照配置文件中的顺序来进行匹配,如果有一个匹配成功,则结束正则匹配,且最后匹配结果为此location?,否则,最后结果为先前最精确匹配的的那个location?。

之前有提到过”^~”,它配置在非正则匹配中,表示,如果最精确匹配的loction为此location?,则立即返回该location?作为结果,而不进行下一步的正则匹配,这样,就此可以不必要进入到正则匹配当中,以加快匹配速度。

还有”=”,它是最精确的匹配,而且优先级最高。最先进行带”=”的匹配,如果匹配成功,立马返回。

最后总结下匹配的过程,有四步:
1. 带”=”前缀的先进行匹配,如果找到了,中止查找。
2. 所有其它location?进行非正则的匹配,找到最精确匹配的那个,如果匹配到带”^~”前缀的,则中止查找。
3. 正则查找,按照我们配置文件中配置的location?顺序进行查找。
4. 如果正则查找匹配成功,则使用此正则匹配的location?,否则,使用第二步查找的结果。

这里要特别说明下”=”与”^~”的区别:
“=”在匹配时,则匹配带”=”的location?。而”^~”,则会匹配所有非”=”的非正则location?,只有在确认它是最精确匹配的location?后,才生效。

热点排行