參考: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中的體現