location匹配原则

location前缀:^~、~、~*、=、@、空

  • location分类:
    • 普通location:空 最长匹配、= 全匹配、^~ 匹配完后不继续匹配正则
    • 正则location:~ 大小写敏感。~* 大小写不敏感
    • @类型location:@ 与服务器交互 也算是普通location的一种,但下面逻辑不包含@的情况。

遵守的大原则

正则 location 匹配让步普通location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果

匹配顺序

一条请求过来的url,先进行普通匹配,如果被“=”location完美匹配到(location = / {}是例外,这个被完全匹配还是会继续去寻找正则),或者被“^~”匹配到,则不会再进行正则匹配,除开这两种之外的普通location,匹配到之后先存储匹配的结果,接着再进行正则匹配(nginx配置文件存在正则location的情况下),如果正则匹配能匹配到,则将正则匹配到的结果覆盖普通location,反之则使用普通匹配到的结果。

nginx配置文件中location的写法先后顺序

普通location,和写法顺序无关,最大长度匹配原则,如果之后没去匹配正则,则返回最大长度匹配获得的结果。 正则location,和写法顺序有关,从上往下匹配,一旦匹配到,直接返回结果。

其他

普通匹配中,^~和=匹配有什么区别? ^~遵循最长匹配原则,而=是严格匹配。