apisix~路由前缀的正则匹配
参考: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]+$"]
]
各部分含义:
uri
:- 这是要匹配的变量名称。在这个例子中,表示我们要检查请求的 URI。
~~
:- 这是一个匹配操作符,用于表示正则表达式匹配。在 APISIX 中,
~~
表示“使用正则表达式进行匹配”。
- 这是一个匹配操作符,用于表示正则表达式匹配。在 APISIX 中,
"^/[a-z]+$"
:- 这是一个正则表达式,表示 URI 必须以
/
开头,后面跟着一个或多个小写字母([a-z]
),并且整个字符串必须以这些小写字母结束。 - 具体来说:
^
:表示字符串的开始。/
:表示 URI 必须以斜杠开头。[a-z]+
:表示后面至少有一个小写字母。$
:表示字符串的结束。
- 这是一个正则表达式,表示 URI 必须以
示例匹配
匹配的 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这种限流,应该如何实现?
实现思路
- 路由a和路由b它们的前缀匹配是相同的
- 路由b通过vars添加路由规则,找出要限制的uri
- 路由a添加相同的vars,但需要添加
!非
运算符,这样a和b就分别处理不同的uri了,但前缀是相同的
路由配置
# 路由a
"uri": "/demo/*",
"vars": [
[
"uri",
"!",
"~*",
"^.*/search$"
]
],
# 路由b
"uri": "/demo/*",
"vars": [
[
"uri",
"~*",
"^.*/search$"
]
],
apisix-dashboard中的体现
apisix~路由前缀的正则匹配的更多相关文章
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
- Flask基础(3):session、flash、特殊装饰器、蓝图、路由正则匹配、上下文管理 & flask-session
Session: Flask 默认将 session 以加密的形式放到了浏览器的 cookie 中 Flask 的 session 就是一个字典,字典有什么方法 session 就有什么方法 flas ...
- Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法
Django 路由分配设置 re_path正则匹配 include总路由设置 url额外参数的传递 name的使用 模板的渲染:render方法 路由的分配中, 可以设定相应的转换器加以约束,比如 ...
- Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析
今日内容详细 可视化界面之数据增删改查 针对数据对象主键字段的获取可以使用更加方便的 obj.pk获取 在模型类中定义__str__方法可以在数据对象被执行打印操作的时候方便查看 ''' form扁担 ...
- 12月12日内容总结——Django之数据增删改查、Django请求生命周期流程图、Django路由层(路由匹配、转换器、正则匹配)、反向解析
目录 一.可视化界面之数据增删改查 二.django请求生命周期流程图 三.django路由层 1.路由匹配 2.转换器 3.正则匹配 不同版本的区别 正则匹配斜杠导致的区别 4.正则匹配的无名有名分 ...
- Aho-Corasick算法、多模正则匹配、Snort入门学习
希望解决的问题 . 在一些高流量.高IO的WAF中,是如何对规则库(POST.GET)中的字符串进行多正则匹配的,是单条轮询执行,还是多模式并发执行 . Snort是怎么组织.匹配高达上千条的正则规则 ...
- Nginx 笔记与总结(7)Location:正则匹配
在 /usr/local/nginx/conf/nginx.conf 的默认 server 段中,保留默认的 location 信息(之前测试的 location 配置删除): location / ...
- Linux shell中的一个问题 ${}带正则匹配的表达式
目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解.后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式.故记录下来,以备后来查阅. 问题: 在某 ...
- FPGA做正则匹配和网络安全,究竟有多大的优势?
FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全 ...
- 【转】ASP.NET Core MVC 配置全局路由前缀
本文地址:http://www.cnblogs.com/savorboard/p/dontnet-IApplicationModelConvention.html作者博客:Savorboard 前言 ...
随机推荐
- CSS – Media Query
前言 Media Query 是用来做 RWD 的, 类似 JS 的 if else. 写的多有伤管理, 所以要谨慎使用哦. 参考: Learn CSS Media Query In 7 Minute ...
- 网络安全&密码学—python中的各种加密算法
网络安全&密码学-python中的各种加密算法 一.简介 数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露.篡改或滥用.加密后的数 ...
- MyBatis——案例——查询-单条件查询-动态条件查询
单条件查询-动态条件查询(choose(when,otherwise)) 从多个条件中选择一个 choose(when,otherwise) 选择,类似于java中的Switch语句(w ...
- [OI] 模拟退火
模拟退火是一种适合求样本点较大的多峰函数极值的方法. 模拟退火有几个参数:初始温度(\(T_{0}\)),终止温度(\(T_{e}\))和降温参数 \(d\),具体地,模拟退火是让每次的当前温度 \( ...
- 什么是SQL注入并解决
' or ' 1 ' = ' 1 原理:通过违规的字符串改变原来的SQL语句 :[将敏感字符进行转义] // 包名 package com.zhulx.JDBC; // 导入实例类 import co ...
- Vue3 的 nextTick 函数
作用: DOM 渲染是异步耗时的, vue2.x 需要等到 DOM 渲染完成之后做某个事情,需要使用 this.$nextTick , vue3.x 则直接提供了 nextTick 这个方法去实现 : ...
- Vue3 的watch 监视属性
1. 监听单个 watch(变量,(新值,老值)=>{}) 2. 监听多个 watch([变量1,变量2],(新值,老值)=>{}) 3. 监听对象 watch(()=>对象,(新值 ...
- Mips单周期CPU设计(logisim实现)
Logisim单周期cpu设计文档与思考题 设计文档 支持指令集 指令 格式 描述(RTL) 机器码 OPCODE/FUNCT add add rd rs rt GPR[rd] <- GPR[r ...
- 第八届御网杯线下赛Pwn方向题解
由于最近比赛有点多,而且赶上招新,导致原本应该及时总结的比赛搁置了,总结来说还是得多练,因为时间很短像这种线下赛,一般只有几个小时,所以思路一定要清晰,我还是经验太少了,导致比赛力不从心,先鸽了~ S ...
- TCP-UDP-Socket调试工具以及使用教程(亲测好用!)
前言 TCP-UDP老程序都不陌生吧,面试常问.所以在网络编程与网络应用开发的过程中,调试是一个至关重要的环节,它帮助开发者确保数据能够准确无误地在不同节点之间传输.尤其当涉及到TCP/IP.UDP等 ...