Nginx-正则匹配

Nginx 中的正则匹配主要用于 location 块中,通过正则表达式匹配不同的 URL 路径,从而应用不同的配置规则。以下是 Nginx 正则匹配的核心用法和示例:

一、正则匹配的基本规则

  1. 符号含义
    • ~:区分大小写的正则匹配
    • ~*:不区分大小写的正则匹配
    • !~:区分大小写的正则不匹配
    • !~*:不区分大小写的正则不匹配
  1. 优先级

Nginx 会按以下顺序匹配 location:

    1. 精确匹配(location = /path)
    1. 前缀匹配(location /path,不带正则符号)
    1. 正则匹配(~ 或 ~* 开头的规则)
    1. 通用前缀匹配(location /)

二、常用正则表达式语法

符号 含义 示例
. 匹配任意单个字符(除换行符) a.b 匹配 aab、acb 等
* 匹配前一个字符 0 次或多次 ab* 匹配 a、ab、abb
+ 匹配前一个字符 1 次或多次 ab+ 匹配 ab、abb 等
? 匹配前一个字符 0 次或 1 次 ab? 匹配 a 或 ab
? 匹配字符串开头 ^/api 匹配以 /api 开头的路径
$ 匹配字符串结尾 .html$ 匹配以 .html 结尾的路径
() 分组捕获 (\d+) 匹配数字并捕获
` ` 逻辑或
[] 匹配括号内的任意单个字符 [0-9] 匹配任意数字
[^] 匹配不在括号内的任意单个字符 [^a-z] 匹配非小写字母
\d 匹配数字(等价于 [0-9]) \d{2} 匹配 2 位数字
\w 匹配字母、数字或下划线(等价于 [a-zA-Z0-9_]) \w+ 匹配单词

三、实际配置示例

1. 匹配静态资源(图片、CSS、JS)

csharp 复制代码
# 不区分大小写匹配常见静态资源后缀,应用缓存配置
location ~* .(jpg|jpeg|png|gif|css|js|ico)$ {
    root /var/www/static;
    expires 30d;  # 缓存30天
}

2. 匹配 API 路径并代理到后端服务

perl 复制代码
# 区分大小写匹配以 /api/ 开头的路径,代理到后端接口服务
location ~ ^/api/ {
    proxy_pass http://127.0.0.1:8080;  # 后端服务地址
    proxy_set_header Host $host;
}

3. 禁止访问特定文件或目录

bash 复制代码
# 匹配以 .git 或 .env 开头的文件/目录,拒绝访问
location ~ /.git/ | /.env$ {
    deny all;  # 禁止访问
    return 403;
}

4. 匹配 URL 中的数字 ID 并处理

bash 复制代码
# 匹配 /user/数字 的路径(如 /user/123)
location ~ ^/user/(\d+)$ {
    # 使用捕获的数字($1 表示第一个分组)
    proxy_pass http://127.0.0.1:8080/user?id=$1;
}

5. 不匹配特定路径(反向匹配)

ruby 复制代码
# 不匹配 .html 结尾的路径(即非 HTML 文件)
location ~ !*.html$ {
    access_log off;  # 关闭日志
}

四、注意事项

  1. 正则匹配的贪婪性:正则默认是贪婪匹配(尽可能匹配最长字符串),如需非贪婪匹配,可在量词后加 ?(如 .*?)。
  1. 性能考量:复杂的正则匹配会消耗更多 CPU,建议优先使用精确匹配或前缀匹配,仅对必要场景使用正则。
  1. 测试工具 :可使用 nginx -t 检查正则语法是否正确,也可通过 curl 命令测试匹配效果(如 curl http://域名/path)。

通过灵活运用正则匹配,可以实现 URL 路由、资源过滤、权限控制等多种功能,是 Nginx 配置中非常强大的特性。

相关推荐
Jaygee-8 小时前
个人网盘越来越贵?我用 Nginx 自建了一个 WebDAV
运维·nginx
农村小镇哥17 小时前
nginx服务器的介绍
运维·服务器·nginx
llm大模型算法工程师weng1 天前
负载均衡做什么?nginx是什么
运维·开发语言·nginx·负载均衡
fTiN CAPA1 天前
服务器无故nginx异常关闭之kauditd0 kswapd0挖矿病毒 CPU占用200% 内存耗尽
运维·服务器·nginx
lKWO OMET1 天前
查看 nginx 是否已经启动
运维·数据库·nginx
ywlovecjy1 天前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
hutengyi1 天前
四、nginx的优化和location匹配规则
运维·nginx
eEKI DAND1 天前
一个比 Nginx 还简单的 Web 服务器
服务器·前端·nginx
Watermelo6172 天前
理解 JavaScript 中的“ / ”:路径、资源与目录、nginx配置、请求、转义的那些事
前端·javascript·vue.js·chrome·nginx·正则表达式·seo
Cyber4K2 天前
【Nginx专项】高级进阶架构篇-Location、Rewrite及HTTPS
服务器·nginx·架构·https