Apache本身不原生支持流量镜像,需借助mod_lua异步发送副本、ShenYu网关声明式配置或外部sidecar(如APISIX/Envoy)实现按比例镜像分发。

Apache 本身不原生支持流量镜像(即请求复制、一份主发 + 一份旁路发),mod_proxy_balancer 只做单路径转发,无法自动克隆请求。要实现「按比例的流量镜像分发」,必须借助外部能力或组合模块弥补这一缺口——核心思路是:用 Apache 接收原始请求,通过 rewrite 或 Lua 脚本触发异步/并行副本发送,主路径照常代理,镜像路径单独发起 HTTP 请求到测试环境。
方案一:用 mod_lua 编写轻量镜像逻辑(推荐 Apache 2.4.30+)
这是最可控、低侵入的方式,适合中小规模镜像需求:
- 启用
mod_lua和mod_proxy_http - 在虚拟主机中嵌入 Lua 脚本,利用
proxy:send_request()异步发出镜像副本(注意:需配置LuaScope handler避免阻塞主流程) - 用随机数或 UID 哈希控制比例,例如:
math.random(1, 100) <= 10表示 10% 镜像 - 主响应不受影响,镜像失败也不影响线上;建议将镜像目标设为非关键测试服务,并添加超时与重试限制
方案二:结合 Apache ShenYu 网关(生产级首选)
如果你已有或可引入 Apache ShenYu 作为统一 API 入口,它原生支持声明式流量镜像:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 登录
soul-admin后台,在「流量配置 → 镜像规则」中新建规则 - 指定需镜像的路径(如
/api/order)、目标测试地址(如http://test-order-svc:8080)和抽样比例(支持 1%~100%) - ShenYu 自动完成请求头透传、Body 复制、异步发送,且支持按 Header/Cookie/参数条件过滤镜像范围
- 所有镜像流量带
X-Shenyu-Mirror: true标识,便于测试端识别和隔离处理
方案三:用外部 sidecar 或前置网关承担镜像职责
避免在 Apache 中耦合复杂逻辑,更符合云原生分层治理思想:
- 让 Apache 专注 TLS 终止、路由分发、基础鉴权,把镜像任务交给专业组件
- 例如:K8s 环境下部署 APISIX Ingress,启用其
mirror插件,一条 YAML 即可定义镜像比例与目标 - 或使用 Envoy Sidecar 配置
route.mirror_policy,由 Istio 控制面统一下发规则 - Apache 仅需反向代理到该网关即可,保持自身轻量稳定
不复杂但容易忽略:镜像流量不能携带敏感凭证(如 Authorization token),建议在镜像前通过 RequestHeader unset Authorization 清除;同时测试环境需做好幂等设计,避免因重复请求引发脏数据。

















