OpenResty Edge 镜像请求:复制线上流量到测试、WAF 与审计后端,不拖慢主请求
OpenResty Edge 的镜像请求(Mirror Request)功能会把每个进入的请求复制一份,发送到一个或多个后端服务器,而主请求照常处理、不受影响。同步模式下,主请求会等待镜像完成后再响应;异步模式(v25.12.1-1 新增)下,主请求立即响应、不受镜像影响。配合请求体转发与自定义 Lua 回调,你可以把线上流量复制到测试、WAF 或审计后端,而不给主请求增加延迟。
本文讲解什么是请求镜像、何时使用,以及如何在 OpenResty Edge 中一步步配置。
为什么使用镜像请求?安全、A/B 测试与低延迟日志
OpenResty Edge 的镜像请求功能,就像是为主请求配备了一个“分身术”。它能在处理主请求的同时,生成一个或多个子请求(即镜像请求)。这些“分身”会带着原始请求的副本,前往预设的后端服务器执行各种幕后任务。在异步模式下,主请求可以不受任何阻碍地快速响应,丝毫不影响用户体验。
- 增强安全与合规性:镜像请求功能通过异步处理 Web 应用防火墙(WAF) 扫描与身份认证,确保主请求的低延迟,从而在不影响用户体验的前提下,满足金融、电商等行业对安全与合规性的严苛要求,显著提升用户信任与业务效率。
- 灵活的业务流程编排:镜像请求功能,使您能够在不影响核心业务的前提下,将实时数据高效应用于监控、分析、A/B 测试及灰度发布等多元场景。为构建高可用边缘应用提供强大支撑。
- 极致性能与用户体验:通过引入异步镜像模式,您的主请求将不再需要等待辅助性后台任务如日志记录、数据统计的完成,从而能够实现对客户端的即时响应。这一机制显著降低了主请求的延迟,确保您的用户能够享受到更为迅捷、无缝的应用体验。
OpenResty Edge 如何镜像请求?
镜像请求的强大,源于 OpenResty Edge 底层卓越的请求处理能力。它巧妙地在请求生命周期的关键阶段,创建并派生出子请求,从而实现对原始请求的精准复制和高效转发。
为了满足您各种复杂多变的业务需求,我们提供了极其丰富的配置选项:
- 类型(RAW/CUSTOM):您可以选择直接镜像原始请求(RAW),也可以通过自定义 Lua 模块(CUSTOM)进行深度定制,实现请求内容的修改、条件判断等高级逻辑。
- 异步镜像模式(v25.12.1-1 新增):开启此选项后,主请求无需等待镜像请求的完成,彻底解耦了主请求与镜像请求的执行,极大地提升了响应速度,是实现高性能边缘计算的关键。
- 转发请求体(v25.12.1-1 新增):允许将原始请求的请求体一并转发给镜像服务器,这对于需要完整请求内容的 WAF 或日志系统至关重要。极大地扩展了镜像请求在安全审计、数据分析等场景的应用深度。
- 灵活的上游选择与负载均衡:您可以指定镜像请求的目标上游服务器,并选择 Hash、Chash、Roundrobin 等多种负载均衡算法。
- 完善的容错机制:支持配置重试次数、发送/读取/连接超时时间,并默认启用快速失败机制(与健康检查联动),确保系统在高负载或后端服务异常时的稳定性。
OpenResty Edge v25.12.1-1 版本已引入异步镜像模式与请求体转发能力的关键增强,现已发布,欢迎体验最新功能。
用于自定义镜像的 Lua 回调函数
OpenResty Edge 为您提供了强大的自定义能力,允许您编写专属的 Lua 模块。
通过 before_mirror、mirror_rewrite、mirror_header_filter 等一系列精心设计的回调函数,您可以在镜像请求的每一个关键阶段进行深度干预。这意味着您可以根据请求内容智能判断是否跳过镜像,灵活修改镜像请求的头部信息,甚至在镜像请求完成后执行您自定义的特定操作。
这种全面的灵活性,旨在赋能开发者,帮助您精准地定制镜像行为,以满足各种复杂的业务需求。
如何在 OpenResty Edge 中配置镜像请求
配置镜像请求功能非常直观,以下是主要步骤:
添加全局 Lua 模块(可选,用于 CUSTOM 类型):
local _M = {} function _M.before_mirror(ctx) local content_length = tonumber(ngx.var.content_length) if content_length and content_length > 4096 then return ngx.DONE -- 跳过镜像操作 end return ngx.OK end function _M.mirror_rewrite(ctx) ngx.req.set_header('X-Real-IP', tostring(ngx.var.remote_addr)) end function _M.mirror_header_filter(ctx) ngx.log(ngx.ERR, "in mirror_header_filter") end function _M.mirror_body_filter(ctx) ngx.log(ngx.ERR, "in mirror_body_filter") end function _M.after_mirror(ctx, resp) ngx.header['mirror-response-body'] = resp.body end function _M.header_filter() ngx.log(ngx.ERR, "in main request header filter") end function _M.body_filter() ngx.log(ngx.ERR, "in main request body filter") end return _M
回调函数说明:
before_mirror:子请求创建前调用,返回ngx.DONE可跳过镜像操作。mirror_rewrite:子请求rewrite阶段调用,可修改子请求信息。mirror_header_filter:子请求header_filter阶段调用,可修改子请求响应头。mirror_body_filter:子请求body_filter阶段调用,可修改子请求响应体(异步模式下不会调用)。after_mirror:子请求完成后调用(异步模式下不会调用)。header_filter:主请求header_filter阶段调用。body_filter:主请求body_filter阶段调用。
添加镜像服务器: 在 OpenResty Edgee 管理界面中配置您的镜像目标上游服务器。
配置页面规则: 在页面规则中启用镜像请求动作,并选择相应的配置参数和 Lua 模块(如果使用 CUSTOM 类型)。
测试请求:
$ curl http://test.com -v # 响应结果中将包含镜像服务器的响应内容,例如: # mirror-response-body: i am mirror server
如果您对镜像请求功能的具体实现细节或高级应用场景感兴趣,欢迎您查阅 OpenResty Edge 镜像请求 文档。
常见问题
什么是请求镜像?
请求镜像(也叫流量影子,traffic shadowing)会把线上请求复制一份,发送到一个或多个次要后端做额外处理,而原始请求照常提供服务。默认情况下,镜像的响应不会改变主响应路径;在 OpenResty Edge 中,你也可以通过 after_mirror 回调选择性地捕获它。它常用于把线上流量复制到测试、WAF 或审计服务器。
请求镜像会拖慢主请求吗?
异步模式下不会。OpenResty Edge 的异步镜像模式(v25.12.1-1 新增)把镜像与主请求彻底解耦,主请求立即响应、无需等待。同步模式下,主请求会等待镜像完成后再响应——当主响应发送前必须拿到镜像结果时,这才是正确选择。
可以把请求体转发给镜像服务器吗?
可以。转发请求体(Forward Request Body)选项(v25.12.1-1 新增)会把原始请求的请求体一并发送给镜像请求。对于需要完整请求内容做安全审计或数据分析的 WAF 与日志系统,这一点至关重要。
OpenResty Edge 镜像请求与 nginx mirror 模块有何不同?
OpenResty Edge 通过管理控制台的页面规则来镜像请求——无需改写 nginx 配置——并提供了原生 ngx_http_mirror_module 所没有的能力:异步模式、请求体转发、自定义 Lua 回调(before_mirror、mirror_rewrite 等)、上游选择与负载均衡,以及内置的容错机制(重试、超时与快速失败健康检查)。
关于 OpenResty Edge
OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴,是“边缘计算“、”动态追踪“和“机器编程“的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!



















