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 '通用匹配';
}
所有其他规则没有匹配到的路径,都会使用通用匹配