# Location

# 匹配 url 加不加/的区别

由于 location 进行的是模糊匹配,所以对于加/的这种情况只能匹配像/taobao/any这种 url,不加/的情况可以匹配/taobao[any]这种 url

# 转发 url 加不加/的区别

forward.html
taobao/forward.html
location /taobao/ {
    proxy_pass http://127.0.0.1:9001;
}
location /taobao/ {
    proxy_pass http://127.0.0.1:9002/;
}
curl http://localhost:9001/taobao/forward.html
curl http://localhost:9002/taobao/forward.html

/访问的资源是/usrl/local/test/forward.html, 不加/访问的资源是/usrl/local/test/taobao/forward.html

/的话相当于绝对路径,不会把location中匹配的url代理走,不加/的话会把匹配的路径部分也给代理走

# 匹配 url 的顺序问题

  • 普通 location 之间的顺序规则是有个最大匹配原则,越精确优先级越高
  • 正则 location 之间会有顺序,写在前面的会被优先匹配到
  • 正则 location 优先级要高于普通的 lcoation
  • 精确 location 优先级要高于正则 location

总结 精确匹配 (=) > 正则 lcoation(有顺序限制,只匹配第一个) > 普通 lcoation (最大匹配原则)

这里有个特殊情况是遇到^~,在不被覆盖的情况下,不匹配后面的正则 location。