location匹配规则

普通匹配概述 = : 这代表精准匹配全路径, 命中它后直接返回, 不再进行后续匹配, 优先级最高. ^~ : 这代表精准匹配开头, 命中开头后直接返回, 不再进行后续匹配, 优先级第二. 无匹配方式符号 : 这代表通用性匹配, 命中后还会继续后续匹配, 最后选取路径最长的匹配, 并储存起来, 优先级第四.

普通匹配举例 #这是精准匹配, 只有请求路径完全匹配`/index.html`才会命中它 location = /index.html { ... } #这是精准匹配开头, 只要请求路径的开头是`/image/`, 就会命中并立即返回 location ^~ /image/ { ... } #这是无匹配方式符号的普通匹配, 如果请求路径开头是`/image/`, 则会命中, 但是不会立即返回还会接着进行普通匹配 location /image/ { ... } #这是无匹配方式符号的普通匹配, 如果请求路径开头是`/image/meinv`, 则会命中, 但是不会立即返回还会接着进行普通匹配, 同时会舍弃掉上面那个匹配 location /image/meinv { ... }

正则匹配概述 ~: 这是区分大小写的正则匹配, 命中后则不进行后续匹配, 立即返回, 优先级第三. ~: 不区分大小写的正则匹配, 命中后则不进行后续匹配, 立即返回, 优先级第三.

正则匹配举例 #区分大小写的正则匹配, 如果路径包含 /image/ 则立即返回, 注意这里并不需要开头命中, 因为这是正则表达式 location ~ /image/ { ... } #区分大小写的正则匹配, 如果路径包含 /image(不分大小写)/ 则立即返回, 注意这里并不需要开头命中, 因为这是正则表达式, 但由于上面一个正则匹配规则在前面, 所以如果路径包含 /image/ 则会被挡下来, 匹配不到这里. location ~ /IMAGE/ { ... }

location如何匹配? 先进行普通匹配中的精准匹配, 如果命中了立马返回. 然后进行普通匹配中的精准开头匹配, 如果命中则立马返回. 进行普通匹配中的 无匹配符号 匹配, 如果命中继续匹配, 知道普通匹配全部完成, 并保存路径最长的匹配. 由上自下进行正则匹配, 如果命中立即返回. 如果正则匹配全部失败, 则返回普通匹配中存放的匹配.


文章作者: Cunese
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cunese
nginx
喜欢就支持一下吧