apisix~路由前綴的正則匹配
參考:https://apisix.apache.org/zh/docs/apisix/FAQ/
在你提供的 Apache APISIX 路由配置中,vars 字段用于定義一些變量匹配規(guī)則。具體來說,vars 字段可以用來根據(jù)請(qǐng)求的特定變量(如 URI、請(qǐng)求方法等)進(jìn)行條件匹配。
添加正則路由
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:- 這是要匹配的變量名稱。在這個(gè)例子中,表示我們要檢查請(qǐng)求的 URI。
-
~~:- 這是一個(gè)匹配操作符,用于表示正則表達(dá)式匹配。在 APISIX 中,
~~表示“使用正則表達(dá)式進(jìn)行匹配”。
- 這是一個(gè)匹配操作符,用于表示正則表達(dá)式匹配。在 APISIX 中,
-
"^/[a-z]+$":- 這是一個(gè)正則表達(dá)式,表示 URI 必須以
/開頭,后面跟著一個(gè)或多個(gè)小寫字母([a-z]),并且整個(gè)字符串必須以這些小寫字母結(jié)束。 - 具體來說:
^:表示字符串的開始。/:表示 URI 必須以斜杠開頭。[a-z]+:表示后面至少有一個(gè)小寫字母。$:表示字符串的結(jié)束。
- 這是一個(gè)正則表達(dá)式,表示 URI 必須以
示例匹配
-
匹配的 URI:
/abc/xyz/a
-
不匹配的 URI:
/ABC(包含大寫字母)/123(包含數(shù)字)/abc/def(包含多個(gè)路徑段)
以/search結(jié)尾的路由正則
"uri": "/kc/*",
"vars": [
"uri",
"~~",
"^.*/userinfo$"
]
總結(jié)
通過這種方式,vars 字段允許你對(duì)請(qǐng)求的 URI 進(jìn)行更細(xì)粒度的控制和過濾。只有當(dāng)請(qǐng)求的 URI 符合指定的正則表達(dá)式時(shí),路由才會(huì)被匹配到。這使得路由配置更加靈活,可以針對(duì)特定的請(qǐng)求進(jìn)行處理。
實(shí)踐
- 如果兩個(gè)路由a和b,其中a是正常的請(qǐng)求,b用來限制某個(gè)規(guī)則的uri需要添加limit-count這種限流,應(yīng)該如何實(shí)現(xiàn)?
實(shí)現(xiàn)思路
- 路由a和路由b它們的前綴匹配是相同的
- 路由b通過vars添加路由規(guī)則,找出要限制的uri
- 路由a添加相同的vars,但需要添加
!非運(yùn)算符,這樣a和b就分別處理不同的uri了,但前綴是相同的
路由配置
# 路由a
"uri": "/demo/*",
"vars": [
[
"uri",
"!",
"~*",
"^.*/search$"
]
],
# 路由b
"uri": "/demo/*",
"vars": [
[
"uri",
"~*",
"^.*/search$"
]
],
apisix-dashboard中的體現(xiàn)

浙公網(wǎng)安備 33010602011771號(hào)