找回密码
 立即注册
首页 业界区 安全 apisix~fault-injection条件式异常响应

apisix~fault-injection条件式异常响应

任俊慧 2025-7-4 12:09:18

  • https://apisix.apache.org/zh/docs/apisix/plugins/fault-injection/
  • https://github.com/apache/apisix/issues/9203
这个插件就是做异常返回的事的,不要使用traffic-split来做这种事


  • 可以根据请求头,查询参数,来动态响应一个异常信息
核心参数


  • abort.vars 执行故障注入的规则,当规则匹配通过后才会执行故障注。vars 是一个表达式的列表,来自 lua-resty-expr。
注意:


  • 从原码中可以看到,fault-injection插件的优先级非常高,是11000,所以,当你使用这个插件时,如果发现配置未生效,可以修改在使用时重新配置它的优先级即可。
  • fault-injection插件中的vars条件可能依赖于其它插件处理的结果,所以需要降低fault-injection的优先级。
实例如下


  • 请求参数中name为jack的,直接返回403
  • 请求头中,age为18的,直接返回403
  1. "fault-injection": {
  2.    "_meta": {
  3.         "disable": false,
  4.         "priority": 1
  5.       },
  6.     "abort": {
  7.         "http_status": 403,
  8.         "body": "Fault Injection!\n",
  9.         "vars": [
  10.             [
  11.                 [ "arg_name","==","jack" ]
  12.             ]
  13.         ]
  14.     },
  15.     "delay": {
  16.         "duration": 2,
  17.         "vars": [
  18.             [
  19.                 [ "http_age","==","18" ]
  20.             ]
  21.         ]
  22.     }
  23. }
  24.         
复制代码
lua-resty-expr 语法介绍

lua-resty-expr 是 OpenResty 中的一个库,用于构建复杂的条件表达式,常用于流量路由、访问控制等场景。它提供了一种声明式的 DSL 来描述条件逻辑。
基本语法结构

lua-resty-expr 的基本表达式是一个 Lua 表(table),由操作符和操作数组成:
  1. local expr = require "resty.expr"
  2. local ex = expr.new({
  3.     {op, var, val},
  4.     {op, var, val},
  5.     -- 更多条件...
  6. })
复制代码
操作符 (op)

支持的操作符包括:
<ul>比较操作符:
<ul>"==":等于
"~=":不等于
">":大于
">=":大于等于
"=", "arg_age", 18}},                {{"==", "arg_country", "US"}}            }        },        {            {"in", "arg_role", {"admin", "superuser"}}        }    }})[/code]字符串操作
  1. local ex = expr.new({
  2.     {"==", "arg_foo", "bar"},  -- GET 参数 foo 等于 "bar"
  3.     {"==", "http_x_api_key", "12345"},  -- X-API-Key 头等于 "12345"
  4. })
复制代码
使用表达式

创建表达式对象后,可以这样使用:
  1. local ex = expr.new({
  2.     {"and",
  3.         {{"==", "arg_debug", "true"}},
  4.         {{"==", "http_user_agent", "test_client"}}
  5.     }
  6. })
复制代码
注意事项


  • 表达式在内部会被编译为高效的 Lua 代码
  • 支持短路求值(short-circuit evaluation)
  • 变量名中的 - 会被替换为 _(例如 http_x_forwarded_for)
lua-resty-expr 提供了一种灵活而强大的方式来描述复杂条件逻辑,特别适合在 OpenResty 的上下文中进行流量控制和路由决策。

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册