location 匹配问题

Nginx服务器会首先会检查多个location中是否有普通的uri匹配,如果有多个匹配,会先记住匹配度最高的那个。然后再检查正则匹配,这里切记正则匹配是有顺序的,从上到下依次匹配,一旦匹配成功,则结束检查,并就会使用这个location块处理此请求。如果正则匹配全部失败,就会使用刚才记录普通uri匹配度最高的那个location块处理此请求。

我对这个多个匹配不太懂
location /bokeyuan{

    return 100;
}

location = /boke {
    return 101;
}


location ^~ /bokeyy {
    return 104;
}

location ~* ^/bo$ {

    return 104;
}

比如我访问/bokey 那我这里的最长匹配应该是第一条把 因为匹配的最接近 也就是
location /bokeyuan{

    return 100;
}

然后去正则 匹配 发现正则不符合 那应该就是命中这个 return 100吧 但是为何是404 not found

阅读 2.2k
1 个回答

location 里面的规则要全部匹配上才算命中

  • = /juejin 这个是精确匹配,uri都对不上,匹配不成功
  • ^~ ^/jue$ 这个是模糊匹配,非正则匹配,写个正则在这里匹配不到

然后剩下的正则,都匹配不上


忽然发现题目改了....

这里再说一下,要全部匹配上才算命中,没有说匹配规则的一部分就算命中的

最长匹配是指,多条命中的情况下,取最长的那个,在同一优先级内有效,比如说有下面两条规则

  • /abc
  • /abcdefg

然后访问 /abcdefg ,这就是两条规则都命中,然后取第二个,如果访问 /abcd 就只命中了第一条。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题