Nginx 正则匹配语法速查表
1. Nginx location
匹配类型
写法 | 说明 | 示例 | 匹配效果 |
---|
location = /uri | 精确匹配 | location = /login | 只匹配 /login |
location /uri | 前缀匹配(默认) | location /img/ | 匹配 /img/a.png 、/img/b.jpg |
location ^~ /uri | 优先的前缀匹配(忽略正则) | location ^~ /static/ | /static/css/1.css 一定走这里 |
location ~ pattern | 正则匹配(区分大小写) | location ~ \.php$ | 匹配以 .php 结尾的 URL |
location ~* pattern | 正则匹配(不区分大小写) | `location ~* .(jpg | png |
2. 正则表达式常用符号
符号 | 含义 | 示例 | 匹配结果 |
---|
. | 任意单个字符 | a.c | abc 、axc |
* | 前一个字符重复 0 次或多次 | ab* | a 、ab 、abb 、abbb... |
+ | 前一个字符重复 1 次或多次 | ab+ | ab 、abb 、abbb... |
? | 前一个字符重复 0 次或 1 次 | ab? | a 、ab |
^ | 匹配字符串开头 | ^/api | /api/user ✅ /test/api ❌ |
$ | 匹配字符串结尾 | \.php$ | /index.php ✅ /index.php?id=1 ❌ |
\ | 转义字符 | \.git | 匹配 .git 而不是任意字符+git |
` | ` | 或条件 | `(jpg |
[] | 字符集 | [0-9] | 匹配任意数字 |
{n} | 前一个字符重复 n 次 | a{3} | aaa |
{n,} | 前一个字符重复 ≥n 次 | a{2,} | aa 、aaa 、aaaa... |
{n,m} | 前一个字符重复 n~m 次 | a{2,4} | aa 、aaa 、aaaa |
3. 常见 Nginx 正则示例
# 匹配以 .php 结尾的请求
location ~ \.php$ {deny all;
}# 匹配 .jpg/.png/.gif (不区分大小写)
location ~* \.(jpg|png|gif)$ {root /var/www/images;
}# 禁止访问隐藏文件,如 .git、.svn
location ~ /\.(git|svn) {deny all;
}# 匹配 /api/ 开头的路径
location ^~ /api/ {proxy_pass http://127.0.0.1:8080;
}
4. 匹配优先级规则(从高到低)
=
精确匹配^~
前缀匹配(优先级高于正则)~
和 ~*
正则匹配(按配置顺序从上到下匹配)- 普通前缀匹配(最长匹配原则)
总结:
location
有多种匹配方式(精确、前缀、正则、不区分大小写)- 正则表达式用来精确控制 URL 的匹配
- 写规则时要注意 匹配优先级,否则可能和预期不一致