a6-plugin-traffic-split
概览
traffic-split 插件会根据自定义规则(match)和加权分配(weighted_upstreams),将部分流量动态转发到不同的上游服务。它适用于灰度发布、蓝绿发布和 A/B 测试,且无需修改 DNS 或负载均衡器配置。
适用场景
- 灰度发布:逐步将流量切换到新版本(10% → 50% → 100%)。
- 蓝绿发布:根据请求头或 Cookie 切换流量。
- A/B 测试:根据用户属性(请求头、查询参数或 Cookie)拆分流量。
- 功能开关:将特定用户路由到功能分支。
- 多版本 API:同时运行多个后端版本。
插件配置参考(路由/服务)
顶层配置
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
rules | array[object] | 是 | — | 流量拆分规则列表。每条规则都可以包含 可选的 match,并且必须包含 weighted_upstreams。 |
rules[].match
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
match | array[object] | 否 | [] | 激活此规则的条件。为空表示无条件匹配(所有流量都按权重分配)。 |
match[].vars | array[array] | 否 | — | 变量表达式:["variable", "operator", "value"]。使用 NGINX 变量。同一对象中的多个变量表示 AND,match 中的多个对象表示 OR。 |
运算符:==、~=、>、<、>=、<=、~~(正则匹配)、!~~、in、has、!。详见 lua-resty-expr。
常用变量:arg_name(查询参数)、http_header-name(请求头)、cookie_name(Cookie 值)。
rules[].weighted_upstreams[]
| 字段 | 类型 | 必填 | 默认 | 描述 |
|---|---|---|---|---|
upstream_id | 字符串/整数 | 否 |