nginx的匹配规则 location 分为两部分 前缀 和 文字字符 两部分
如:
location = /hello { } "=" 就是前缀 "/hello" 就是字符
用一个例子来说明匹配顺序,
nginx的配置信息是这样的:
1.location = / {
...
}
2.location /hello {
...
}
3. location /hello/abc {
...
}
4.location ~* /hello {
...
}
一、访问 / 时 这时精准匹配了 配置 1
二、访问 /hello和/hello/abc都会匹配到配置4
(因为在访问/hello路径时,最长匹配到/hello的location,这是记录改location,然后进行正则匹配,找到配置4的location进行匹配,如果不存在配置4则匹配配置2)
(在访问/hello/abc也是一样的匹配规则,先记录配置3在进行正则匹配到配置4)
如果想让 配置2直接匹配/hello,那么可以通过在配置2中加入前缀 “ ^~ ” , 这样在匹配到配置2的时候就直接匹配了,不会走正则。
总结:
1.首先检查文字字符串,如果访问路径匹配到对应的文字字符,且前缀为 “ = ”,匹配并结束。
2. 如果匹配的路径有前缀 "^~", 匹配并结束。
3. 匹配最长的文本字符并记录,然后进行正则匹配,若存在正则匹配,匹配第一个结束,若不存在则匹配最长文本字符的路径。