2018-08-26T06:38:25Z||2018-08-26T06:38:25Z


Nginx location最大的难点就是,有些location是进去了就不会出来了,也就是按照顺序来匹配的。而有些location是即便匹配到了,还会继续往下走,如果下面有更好的匹配,则选择下面的,如果没有,这个location才会有效。

  • location / 匹配任何URL。不稳定,任何正则或者更长的URL的会优先匹配。
  • location /abc 匹配以abc开头的URL,和上面的location /本质是一样的,不稳定,任何正则或者更长的URL的会优先匹配。
  • location = /abc 只匹配/abc这一个URL,稳定,一旦匹配,其他再走到其他location中。
  • ^~ /abc 这个不同于 /abc的是,他是稳定的,一旦匹配进来,立即停止搜索。
  • ~* abc 这个是正则表达式(regular expressions), 稳定的,一旦匹配,立即停止搜索。

还有就是稳定的location会按照顺序来,比如:

location ^~ /abc { }
location ~* abc { }

他们都是稳定的location,遇到/abc这样的URL会进入第一个location。

还有不管是稳定还是不稳定的location,最终只会匹配一个location,这个过程复杂就在于这个location的匹配过程,但绝对不会出现匹配两个(或以上)location,然后把这些location内的配置结合在一起,不会这样的。