Nginx 的匹配符号分两类:
-
location指令层面的匹配修饰符 (决定匹配方式) -
正则表达式内部的特殊字符 (精确控制匹配规则)
一、location 的匹配修饰符(最常用的 5 种)
| 写法 | 含义 | 示例 | 匹配方式 |
|---|---|---|---|
| location = /uri | 精确匹配 | location = /login | 只匹配 /login,不会匹配 /login/xx |
| location ^~ /uri | 前缀匹配但优先于正则 | location ^~ /static/ | 告诉 Nginx “不要再用正则匹配” |
| location ~ pattern | 正则匹配(区分大小写) | location ~ .jpg$ | 匹配以 .jpg 结尾的路径 |
| location ~* pattern | 正则匹配(不区分大小写) | location ~* .jpg$ | png |
| location /uri | 前缀匹配(默认) | location /api | 匹配以 /api 开头的请求,如 /api/user |
匹配优先级顺序:
-
精确匹配
-
前缀匹配
-
正则匹配
-
默认匹配
二、正则表达式中的匹配字符(location ~ 使用)
在 nginx 的 location 中,正则匹配字符(如 .、 *、 ^、 $、 ()等) 只有在使用 ~或 ~*修饰符时才会生效 。
| 符号 | 含义 | 示例 | 说明 |
|---|---|---|---|
| . | 匹配任意单个字符 | a.b → a1b、acb | 若要匹配真正的点需写 . |
| * | 匹配前面字符 0 次或多次 | ab*c → ac、abbc | |
| + | 匹配前面字符 1 次或多次 | ab+c → abc、abbc | |
| ? | 匹配前面字符 0 次或 1 次 | ab?c → ac、abc | |
| {n} | 重复 n 次 | a{3} → aaa | |
| {n,} | 至少 n 次 | a{2,} → aa、aaa | |
| {n,m} | n 到 m 次之间 | a{1,3} → a、aa、aaa | |
| ^ | 匹配字符串开头 | ^/api | |
| $ | 匹配字符串结尾 | .html$ | |
| ` | ` | 或 | `(jpg |
| [] | 字符集合 | [0-9] 表示数字 | |
| [^] | 排除字符集合 | [^a-z] 表示非小写字母 | |
| () | 分组 | `.(css | js)$` |
| \ | 转义 | . 表示点,? 表示问号 |
三、实际例子
# 匹配以 /api 开头的请求
location /api {
proxy_pass http://127.0.0.1:8080;
}
# 匹配所有静态资源
location ~* \.(css|js|png|jpg|gif|ico)$ {
root /home/www/static;
expires 30d;
}结论:
location的修饰符决定匹配方式(精确 / 前缀 / 正则)。
~与~*启用正则语法,内部字符如.、*、^、$控制具体匹配逻辑。