时间:2025-07-04 13:06
人气:
作者:admin
这个插件就是做异常返回的事的,不要使用traffic-split来做这种事
fault-injection的优先级。 "fault-injection": {
"_meta": {
"disable": false,
"priority": 1
},
"abort": {
"http_status": 403,
"body": "Fault Injection!\n",
"vars": [
[
[ "arg_name","==","jack" ]
]
]
},
"delay": {
"duration": 2,
"vars": [
[
[ "http_age","==","18" ]
]
]
}
}
lua-resty-expr 是 OpenResty 中的一个库,用于构建复杂的条件表达式,常用于流量路由、访问控制等场景。它提供了一种声明式的 DSL 来描述条件逻辑。
lua-resty-expr 的基本表达式是一个 Lua 表(table),由操作符和操作数组成:
local expr = require "resty.expr"
local ex = expr.new({
{op, var, val},
{op, var, val},
-- 更多条件...
})
支持的操作符包括:
比较操作符:
"==":等于"~=":不等于">":大于">=":大于等于"<":小于"<=":小于等于"in":包含于"not in":不包含于逻辑操作符:
"and":逻辑与"or":逻辑或"not":逻辑非其他操作符:
"starts_with":以...开头"ends_with":以...结尾"contains":包含"matches":正则匹配变量可以是:
预定义的变量:
"arg_name":请求参数"http_header_name":HTTP 头"cookie_name":Cookie"var_name":Nginx 变量嵌套变量访问:
"arg.user.name":访问嵌套参数值可以是:
in 操作)matches 操作)local ex = expr.new({
{"==", "arg_foo", "bar"}, -- GET 参数 foo 等于 "bar"
{"==", "http_x_api_key", "12345"}, -- X-API-Key 头等于 "12345"
})
local ex = expr.new({
{"and",
{{"==", "arg_debug", "true"}},
{{"==", "http_user_agent", "test_client"}}
}
})
local ex = expr.new({
{"or",
{
{"and",
{{">=", "arg_age", 18}},
{{"==", "arg_country", "US"}}
}
},
{
{"in", "arg_role", {"admin", "superuser"}}
}
}
})
local ex = expr.new({
{"starts_with", "http_user_agent", "Mozilla/"},
{"matches", "arg_email", [[^[^@]+@[^@]+\.[^@]+$]]} -- 简单邮箱格式验证
})
创建表达式对象后,可以这样使用:
local ok, err = ex:eval(ngx.var) -- 通常在 OpenResty 上下文中使用
if ok then
-- 条件满足
else
-- 条件不满足
end
- 会被替换为 _(例如 http_x_forwarded_for)lua-resty-expr 提供了一种灵活而强大的方式来描述复杂条件逻辑,特别适合在 OpenResty 的上下文中进行流量控制和路由决策。
作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980
支付宝扫一扫,为大叔打赏!
