apache无法原生实现流量镜像,需借助apisix/envoy/shenyu等网关、mod_lua脚本或迁移到shenyu,并注意清除敏感头与确保测试服务幂等。

用 Apache 做前置入口,后接专业镜像网关
这是最推荐、最稳定的方式,适合生产环境:
- Apache 专注 HTTPS 卸载、域名路由、基础鉴权和日志记录
- 所有流量先由 Apache 接收,再反向代理到 APISIX / Envoy / ShenYu 等支持镜像的网关
- 在 APISIX 中启用
proxy-mirror插件,配置host(测试服务地址)、sample_ratio(如0.1表示 10%)等参数 - Apache 配置示例(仅代理到 APISIX):
<virtualhost><br> ServerName api.example.com<br> ProxyPass / http://127.0.0.1:9080/<br> ProxyPassReverse / http://127.0.0.1:9080/<br></virtualhost>
用 mod_lua 实现轻量级镜像(仅限 Apache 2.4.30+)
若无法引入新网关,且 Apache 版本较新,可借助 Lua 脚本异步发送副本:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_lua和mod_proxy_http - 在虚拟主机中嵌入 Lua 处理器,用
proxy:send_request()发起非阻塞请求到测试地址 - 用
math.random(1, 100) 控制 5% 抽样,避免影响主响应延迟 - 务必设置超时(如
timeout = 2000)并禁用对镜像响应的等待,防止阻塞主线程 - 注意:镜像请求需手动复制 headers 和 body,且敏感头(如
Authorization)建议提前清除
用 Apache ShenYu 网关替代 Apache 代理
如果当前 Apache 主要用于 API 入口,可考虑直接迁移到 ShenYu:
- ShenYu 是 Java 原生网关,兼容 Apache 生态,管理后台(soul-admin)提供可视化镜像规则配置
- 在「流量配置 → 镜像规则」中指定路径(如
/api/user)、目标地址(http://test-user-svc:8080)、比例(支持 0.01–100%) - 自动透传 header、异步发送、带
X-Shenyu-Mirror: true标识,测试端可据此做隔离处理 - 原有 Apache 的功能(如 SSL 终止)可由 ShenYu 前置的 Nginx 或云 WAF 承担
必须注意的安全与工程细节
无论选哪种方式,以下两点极易被忽略但至关重要:
-
清除敏感凭证:镜像请求中应移除
Authorization、Cookie、X-Real-IP等可能泄露用户身份或绕过鉴权的头,可用RequestHeader unset Authorization或网关插件过滤 - 测试服务需幂等设计:镜像流量是“额外副本”,不能触发支付、发短信、扣库存等副作用操作;建议在测试环境统一拦截写操作,或加开关控制










