nginx匹配规则
目录
nginx匹配规则
在 Nginx 中,一个请求的匹配规则遵循 “最佳匹配优先” 原则,即 匹配度最高的规则生效 ,匹配顺序如下:
1. 关键匹配类型
Nginx 配置中,
location
有不同的匹配方式,匹配优先级如下(从高到低):
优先级 | 匹配类型 | 例子 | 说明 |
---|---|---|---|
1 | = 精确匹配 | location = /login {} | 完全匹配 ,如果匹配成功,则立即使用该规则,不再继续匹配。 |
2 | ^~ 前缀匹配(优先) | location ^~ /static/ {} | 如果匹配,直接使用,不再检查正则匹配 。适用于静态资源。 |
3 | ~ 正则匹配(区分大小写) | `location ~ .(png | jpg)$ {}` |
4 | ~* 正则匹配(不区分大小写) | `location ~* .(png | jpg)$ {}` |
5 | / 前缀匹配(默认) | location / {} | 最普通的前缀匹配 ,如果没有更高优先级的规则匹配,就使用这个。 |
2. 匹配规则的执行流程
当一个请求进来时,Nginx 按如下顺序匹配
location
:
- 先检查
=
精确匹配 ,如果匹配,立即使用该规则,停止搜索。 - 然后检查
^~
,如果匹配,立即使用该规则,停止搜索。 - 接着检查所有
~
和~*
的正则匹配 ,如果多个正则匹配上了,选择 最长的匹配规则 。 - 最后检查普通的
/
前缀匹配 ,如果没有其他匹配,就使用 最长的前缀匹配 。 - 如果都没有匹配,则使用默认的
location /
规则 。
3. 具体示例
假设有以下
location
规则:
server {
listen 80;
location = /exact {
return 200 "精确匹配 /exact\n";
}
location ^~ /static/ {
return 200 "匹配 /static/ 及其子路径\n";
}
location ~ (jpg|png|gif)$ {
return 200 "匹配图片后缀\n";
}
location /blog {
return 200 "匹配 /blog 及其子路径\n";
}
location / {
return 200 "默认匹配\n";
}
}
4. 请求匹配示例
请求 URL | 匹配的 location | 解释 |
---|---|---|
/exact | location = /exact | 精确匹配 ,直接使用此规则。 |
/static/js/app.js | location ^~ /static/ | ^~ 优先级高,匹配后直接使用,不再检查正则规则。 |
/images/photo.jpg | `location ~ .(jpg | png |
/blog/article | location /blog | 前缀匹配 /blog ,最长匹配优先。 |
/somethingelse | location / | 默认匹配 ,因为没有其他匹配规则适用。 |
5. 重点总结
- 精确匹配 (
=
) 优先级最高 ,匹配成功就直接使用,不再检查其他规则。 ^~
规则比正则高 ,如果匹配^~
,直接使用,不再检查正则。- 多个正则 (
~
或~*
) 匹配时,选择最长的匹配规则 。 - 普通前缀匹配 (
/blog
这种) 选择最长匹配的路径 。 - 如果都匹配不上,默认使用
location /
。
🚀 这个机制可以帮助你优化 Nginx 规则,减少不必要的匹配计算,提高性能!