location匹配原则¶
location前缀:^~、~、~*、=、@、空
- location分类:
- 普通location:空 最长匹配、= 全匹配、^~ 匹配完后不继续匹配正则
- 正则location:~
大小写敏感
。~*大小写不敏感
- @类型location:@ 与服务器交互 也算是普通location的一种,但下面逻辑不包含@的情况。
遵守的大原则¶
正则 location 匹配让步普通location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果
匹配顺序¶
一条请求过来的url,先进行普通匹配,如果被“=”location完美匹配到(location = / {}是例外,这个被完全匹配还是会继续去寻找正则),或者被“^~”匹配到,则不会再进行正则匹配,除开这两种之外的普通location,匹配到之后先存储匹配的结果,接着再进行正则匹配(nginx配置文件存在正则location的情况下),如果正则匹配能匹配到,则将正则匹配到的结果覆盖普通location,反之则使用普通匹配到的结果。
nginx配置文件中location的写法先后顺序¶
普通location,和写法顺序无关,最大长度匹配原则,如果之后没去匹配正则,则返回最大长度匹配获得的结果。 正则location,和写法顺序有关,从上往下匹配,一旦匹配到,直接返回结果。
其他¶
普通匹配中,^~和=匹配有什么区别? ^~遵循最长匹配原则,而=是严格匹配。