1. location匹配
1.1. location类型
location主要分为普通匹配和正则匹配:
1 正则匹配的location形式如下:
location ~ /uri/ {...} #区分大小写
location ~* /uri/ {...} # 不区分大小写
2 普通匹配的location形式如下:
location /uri/ {...} #最大前缀匹配; 当严格匹配时,不再继续进行正则匹配
location = /uri/ {...} #严格匹配,不再继续进行正则匹配
location ^~ /uri/ {...} #最大前缀匹配,不再继续进行正则匹配
3 命名的location
error_page 404 = @named_location;
location @named_location {
proxy_pass http://www.baidu.com;
}
1.2. location匹配原则
- 先匹配普通,再考虑匹配正则。
- 普通匹配时,如果严格匹配或使用了
^~
,则不再进行正则匹配,直接使用匹配上的普通location中的规则。 - 普通匹配的优先级为最大前缀匹配优先,与规则在文档中的顺序无关。
- 正则匹配的顺序与文档中的规则顺序有关,按照文档内容从上到下进行匹配,匹配上则停止下面的正则匹配。
- 如果正则匹配上,则使用正则location中的规则。
- 如果正则没有匹配上,则使用普通location里的规则。
2. proxy_pass相关
location /some/path/ {
proxy_pass http://www.example.com/link/;
}
location /another/path/ {
proxy_pass http://www.example.com;
}
上面的配置中,第一个规则中,被代理的服务后面指明了一个URI/link/
,则转发时,会用这个URI替代location参数,例如:请求的URI为/some/path/page.html
会被代理到http://www.example.com/link/page.html
。如果没指定URI,如第二条规则,则会把请求URI直接转发给被代理的服务。
如果location为正则匹配,则代理服务后不可以跟着URI。