Nginx location 匹配规则

本文测试的 nginx 版本为 1.14.2

优先级从高到低排列

语法 匹配规则
= 精确匹配
^~ 非正则匹配
~, ~* 正则匹配,~ 区分大小写,~* 不区分大小写
普通匹配,匹配规则等价于非正则匹配,但它的优先级比正则低
/ 通用匹配,当上面的语法都没有匹配时,就会走通用匹配

例子

1. 精确匹配

location = /a {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '精确匹配';
}

只会匹配 /a。/a/, /ab 都不会匹配

2. 非正则匹配

location ^~ /a {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '精确匹配';
}

能匹配以 /a 开头的路径, 如:/a/, /abc, /a/b/c

3. 正则匹配

location ~ "\d{4}$" {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '正则匹配';
}

能匹配以4个数字结尾的路径,如 /2021, /a/2021

4. 普通匹配

location /a {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '精确匹配';
}

匹配方式等价于例子中第2点的非正则匹配,但优先级要比正则低。

普通匹配不能与非正则匹配使用同一个路径,否则 nginx 解析配置文件时,会出现语法错误,如下:

location ^~ /a {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '精确匹配';
}
location /a {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '精确匹配';
}

使用 nginx -t 测试语法,提示如下:

5. 通用匹配

location / {
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 '通用匹配';
}

所有其他规则没有匹配到的路径,都会使用通用匹配

posted @ 2021-05-15 10:57  真叫人头大啊  阅读(397)  评论(0编辑  收藏  举报