mod_reflector需显式启用并配合压测工具使用:必须加载模块、配置SetHandler reflector、用POST等带body请求,通过ReflectorHeader验证头透传,禁用干扰模块以确保反射准确。

mod_reflector 本身不是压力测试工具,它不生成请求、不控制并发、也不统计性能指标。但它可作为后端反射服务,配合 ab、wrk 等压测工具,构建轻量级、无业务逻辑的 HTTP 反射测试环境,用于验证请求头透传、压缩/解压缩行为、Body 完整性、路由转发链路等底层能力。
确保 mod_reflector 正确启用并触发
很多压测失败,根源在于请求根本没走到 reflector 模块——它不会自动生效,必须显式激活:
- 确认模块已加载:
apachectl -M | grep reflector应输出reflector_module (shared) - 在
<Location>或<Directory>块中,必须写明SetHandler reflector;仅 LoadModule 不起作用 - Apache 2.4+ 中,访问控制请用
Require all granted,避免混用旧版Allow指令导致配置被忽略 - 若用 .htaccess,请确保主配置中
AllowOverride启用了FileInfo,否则SetHandler会被跳过
构造能触发反射的压测请求
mod_reflector 只对含非空请求体(body)的请求生效,且 body 不能被其他模块提前读取。GET 请求永远无效:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 必须使用 POST/PUT/PATCH 方法,并携带 body,例如:
curl -X POST http://localhost/ref -d "test" - 若需测试 gzip 压缩透传,需同时加头和 body:
curl -X POST http://localhost/ref -H "Content-Encoding: gzip" --data-binary @compressed.bin - 避免 body 被提前消费:禁用
mod_security、慎用mod_rewrite的[E]标志、不配置会读取 body 的自定义 filter - ab 工具默认发 GET,要压测 reflector 必须搭配
-p参数提交 body 文件:ab -n 1000 -c 50 -p post_body.txt -T "text/plain" http://localhost/ref/
通过 ReflectorHeader 验证请求头透传
默认情况下,reflector 不返回任何请求头。若要检查 header 是否完整到达、是否被中间件修改,必须显式声明反射规则:
- 在同个
<Location>块中,ReflectorHeader必须写在SetHandler reflector之后才生效 - 每行只反射一个 header,不支持通配符:
ReflectorHeader User-Agent、ReflectorHeader X-Trace-ID - 可重命名 header:
ReflectorHeader X-Request-ID X-Reflected-ID,便于比对或隔离测试 - 压测时可用
-H给 ab 添加自定义头,再检查响应中是否出现对应反射项,验证全链路 header 保真度
与压力测试工具协同工作要点
reflector 是“被压测对象”,不是压测发起方。它应部署在目标 Apache 实例上,作为干净的 endpoint 接收真实流量:
- 不要和
ProxyPass、Redirect混用——这些指令与 reflector 互斥,会导致 handler 不被调用 - 若需模拟反向代理后的行为,应在 proxy 后端指向 reflector endpoint,而非在同一个 Location 内配置两者
- 为排除干扰,建议关闭日志记录(
LogLevel warn)、禁用mod_deflate等可能影响 body 的模块,除非你正专门测试它们 - 用
ab -v 4或wrk -v查看原始请求/响应头,确认 Content-Length、Content-Encoding、反射 header 是否准确回显

















