前言
 
location 匹配路由转发是nginx配置中最常见的配置,最近正在学习相关的知识,记录一下。
 
location配置规则
 
匹配规则
=严格匹配,如果请求匹配这个location,则停止搜索并且处理这个请求~区分大小写匹配(可用正则表达式)~*不区分大小写匹配(可用正则表达式)!~区分大小写不匹配!~*区分大小写不匹配^~前缀匹配@“@” 定义一个命名的location,使用在内部定向时/通用匹配
location匹配顺序
 
"="精确匹配,如果匹配成功,则停止其他匹配普通字符串指令匹配,优先级是从长到短(匹配字符越多,则选择该匹配结果),匹配成功location如果使用 ^~,则停止匹配(正则匹配)正则表达式正则匹配,按照从上到下的原则,匹配成功,则停止匹配如果正则匹配成功,则使用该结果,否则使用普通字符串匹配 
简单总结如下:
 
 
 (location=)> (location完整路径)> (location^~路径) > (location正则顺序) > (location最长字符串匹配,不完全匹配) > (location通配)
 
 
即:
 
 
 (精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)
 
 
 
location匹配实例
 
server 
{
   server_name location.test.com
;
   listen 8010
;
   location 
= / 
{  
      return 200 
"精确匹配/";
   }
   location ~* /ma.*ch 
{
      return 200 
"正则匹配/ma.*ch";
   }
   location ~ /mat.*ch 
{
      return 200 
"正则匹配/match.*";
   }
   location 
= /test 
{
      return 200 
"精确匹配/test";
   }
   location ^~ /test/ 
{
      return 200 
"前缀匹配/test";
   }
   location ~ /test/he*o 
{
      return 200 
"正则匹配/test/he*o";
   }
   location / 
{  
      return 200 
"通配/";
   }
}
 
我们按照这样的 location 匹配实验结果如下:
 
$ 
curl http://localhost:8010/
精确匹配/
$ 
curl http://localhost:8010/test 
精确匹配/test
$ 
curl http://localhost:8010/test/heeo 
前缀匹配/test
$ 
curl http://localhost:8010/matxxch 
正则匹配/ma.*ch
$ 
curl http://localhost:8010/xxxxx 
通配/