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 配置中非常强大的特性。

相关推荐
大得3691 小时前
nginx结合lua做转发,负载均衡
nginx·junit·lua
你的电影很有趣2 小时前
lesson47:Linux常用软件使用指南:远程连接、远程拷贝、Vim与Nginx
linux·nginx·vim
yunyi6 小时前
使用acme.sh来实现自动化申请和续订TLS证书
linux·nginx·docker
namehu1 天前
一次因企微域名限制引发的“骚操作”:Nginx 与 FRP 的踩坑排查实录
linux·nginx
掉鱼的猫1 天前
老码农教你 Solon Web Context-Path 的两种配置
java·nginx·tomcat
带刺的坐椅2 天前
老码农教你 Solon Web Context-Path 的两种配置方式
java·nginx·tomcat·web·solon
2501_920047032 天前
nginx-限速-限制并发连接数-限制请求数
运维·nginx
Monly212 天前
Docker:部署Nginx
nginx·docker·容器
Mr. Cao code2 天前
Nginx与Apache:Web服务器性能大比拼
运维·服务器·前端·nginx·apache