参考:https://apisix.apache.org/zh/docs/apisix/FAQ/

在你提供的 Apache APISIX 路由配置中,vars 字段用于定义一些变量匹配规则。具体来说,vars 字段可以用来根据请求的特定变量(如 URI、请求方法等)进行条件匹配。

添加正则路由

curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/*",
"vars": [
["uri", "~~", "^/[a-z]+$"]
],
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'

配置解析

"vars": [
["uri", "~~", "^/[a-z]+$"]
]

各部分含义:

  1. uri:

    • 这是要匹配的变量名称。在这个例子中,表示我们要检查请求的 URI。
  2. ~~:

    • 这是一个匹配操作符,用于表示正则表达式匹配。在 APISIX 中,~~ 表示“使用正则表达式进行匹配”。
  3. "^/[a-z]+$":

    • 这是一个正则表达式,表示 URI 必须以 / 开头,后面跟着一个或多个小写字母([a-z]),并且整个字符串必须以这些小写字母结束。
    • 具体来说:
      • ^:表示字符串的开始。
      • /:表示 URI 必须以斜杠开头。
      • [a-z]+:表示后面至少有一个小写字母。
      • $:表示字符串的结束。

示例匹配

  • 匹配的 URI

    • /abc
    • /xyz
    • /a
  • 不匹配的 URI

    • /ABC(包含大写字母)
    • /123(包含数字)
    • /abc/def(包含多个路径段)

以/search结尾的路由正则

 "uri": "/kc/*",
"vars": [
"uri",
"~~",
"^.*/userinfo$"
]

总结

通过这种方式,vars 字段允许你对请求的 URI 进行更细粒度的控制和过滤。只有当请求的 URI 符合指定的正则表达式时,路由才会被匹配到。这使得路由配置更加灵活,可以针对特定的请求进行处理。

实践

  • 如果两个路由a和b,其中a是正常的请求,b用来限制某个规则的uri需要添加limit-count这种限流,应该如何实现?

实现思路

  1. 路由a和路由b它们的前缀匹配是相同的
  2. 路由b通过vars添加路由规则,找出要限制的uri
  3. 路由a添加相同的vars,但需要添加!非运算符,这样a和b就分别处理不同的uri了,但前缀是相同的

路由配置

 # 路由a
"uri": "/demo/*",
"vars": [
[
"uri",
"!",
"~*",
"^.*/search$"
]
],
# 路由b
"uri": "/demo/*",
"vars": [
[
"uri",
"~*",
"^.*/search$"
]
],

apisix-dashboard中的体现

apisix~路由前缀的正则匹配的更多相关文章

  1. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  2. Flask基础(3):session、flash、特殊装饰器、蓝图、路由正则匹配、上下文管理 & flask-session

    Session: Flask 默认将 session 以加密的形式放到了浏览器的 cookie 中 Flask 的 session 就是一个字典,字典有什么方法 session 就有什么方法 flas ...

  3. Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法

    Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法   路由的分配中, 可以设定相应的转换器加以约束,比如 ...

  4. Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析

    今日内容详细 可视化界面之数据增删改查 针对数据对象主键字段的获取可以使用更加方便的 obj.pk获取 在模型类中定义__str__方法可以在数据对象被执行打印操作的时候方便查看 ''' form扁担 ...

  5. 12月12日内容总结——Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析

    目录 一.可视化界面之数据增删改查 二.django请求生命周期流程图 三.django路由层 1.路由匹配 2.转换器 3.正则匹配 不同版本的区别 正则匹配斜杠导致的区别 4.正则匹配的无名有名分 ...

  6. Aho-Corasick算法、多模正则匹配、Snort入门学习

    希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...

  7. Nginx 笔记与总结(7)Location:正则匹配

    在 /usr/local/nginx/conf/nginx.conf 的默认 server 段中,保留默认的 location 信息(之前测试的 location 配置删除): location / ...

  8. Linux shell中的一个问题 ${}带正则匹配的表达式

    目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解.后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式.故记录下来,以备后来查阅. 问题: 在某 ...

  9. FPGA做正则匹配和网络安全,究竟有多大的优势?

    FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全 ...

  10. 【转】ASP.NET Core MVC 配置全局路由前缀

    本文地址:http://www.cnblogs.com/savorboard/p/dontnet-IApplicationModelConvention.html作者博客:Savorboard 前言 ...

随机推荐

  1. vue 中 elementUI el-table 实现滚动加载

    vue 中 elementUI el-table 实现滚动加载 一.需求 vue 中 elementUI el-table 实现滚动加载,场景:当表格需要显示大量数据时,又想通过一页来进行展示数据. ...

  2. 【笔记】node常用方法(持续更新)

    1.path.basename(path[, ext]) path <string> ext <string> 可选的文件扩展名. 返回: <string> pat ...

  3. 小tips:HTML元素属性分类以及不常用属性介绍

    HTML元素属性分类 全局属性和局部属性 属性可以分为两类:全局属性和局部属性. 其中全部元素都能使用的通用属性称为全局属性.只能运用在某些特定元素的属性,称为局部属性,例如form的action属性 ...

  4. nacos未授权访问漏洞,导致被网警找

    背景 公司收购了另一家公司,所以相应的后端服务和服务器都交给我管理,但是没有任何的交接文档,大概看了一下代码,依赖的东西就去忙别的了. 直到今天网警突然打电话给我说系统有漏洞(CVE-2021-294 ...

  5. Maven高级——分模块开发与设计

    分模块开发的意义 将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享 分模块开发 创建Maven工程 书写模块代码 注意:分模块开发需要先针对模块功能进行设计,再进行编码.不会先将工 ...

  6. QT疑难杂症之QML程序中如何使用文件系统模型QFileSystemModel?

    简介 本文介绍了 QML程序中如何使用树状控件TreeView展示QT文件系统模型QFileSystemModel中的数据,并给出了两种实现模式. 目录 QML程序中使用文件系统模型的代码 树状控件自 ...

  7. SuperMap iPortal对接流数据方案

    本文结合文章<SuperMap流数据应用技术方案>,使用SuperMap iPortal实时流数据接入数据上图APP中 iPortal软件下载地址(本文使用10.0.1 win64位): ...

  8. 《Vue.js 设计与实现》读书笔记 - 第11章、快速 Diff 算法

    第11章.快速 Diff 算法 11.1 相同的前置元素和后置元素 快速 Diff 算法包含预处理步骤,这借鉴了纯文本 Diff 算法的思路. 先把相同的前缀后缀进行处理,然后再比较中间部分. fun ...

  9. 使用GRUB Multiboot2引导自制操作系统

    使用GRUB Multiboot2引导自制操作系统 前言 之前花了一周时间,从头学习了传统 BIOS 的启动流程.惊讶于背后丰富的技术细节的同时,也感叹 x86 架构那厚重的历史包袱.毕竟,谁能想到, ...

  10. 1.2 HELLO 三角形

    这一节,我觉得是相当有难度的.渲染一个三角形,就需要介绍GLSL语言,图形渲染管线(Graphics Pipeline)以及着色器(Shader),标准化设备坐标(NDC)等诸多概念. 图形渲染管线和 ...