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中的表现