WAF性能数据
本文记录 2026-08-14 完成的 WAF 独立场景性能测试。四个场景分别预热、运行和采集,不包含混合流量。
测试结果
| 场景 | WAF | RPS | P50 | P95 | P99 | 正式轮错误 |
|---|---|---|---|---|---|---|
| 正常小 GET | 关闭 | 144,023.26 | 33.53 ms | 47.757 ms | 56.70 ms | 0 |
| 正常小 GET | 开启 | 129,598.16 | 35.98 ms | 55.588 ms | 64.11 ms | 0 |
| SQL 注入 | 开启 | 81,646.51 | 56.62 ms | 84.099 ms | 2.30 s | 0 |
| XSS | 开启 | 80,775.78 | 57.98 ms | 86.812 ms | 2.70 s | 0 |
- 正常 GET 开启 WAF 后吞吐损失为 10.02%,P50/P95/P99 分别增加 2.45/7.831/7.41 ms。
- SQLi 与 XSS 的阻断吞吐均超过 8 万 RPS,但 5000 并发下 P99 已受 worker 排队影响。
- 四个正式轮均无 socket error、wrk timeout、listen overflow 或 listen drop。
- SQLi/XSS 全部被拦截且未回源;源站 CPU 分别为 0.03% 和 0.02%。
测试条件
| 项目 | 配置 |
|---|---|
| 链路 | 压测机 172.29.4.133 → 节点 172.29.4.134 → 源站 172.29.4.135:18080 |
| 机器 | 三台均为 16 vCPU、14 GiB |
| 压测 | wrk 4.1.0,8 线程,5000 连接,15 秒预热,30 秒正式运行,单轮 |
| 节点 | OpenResty 1.31.1.1,12 worker 固定 CPU4~15,CPU0~3 预留 |
| 连接 | keepalive_requests=10000,超时 30 秒 |
| WAF | 内置模块防护全部开启;自动封禁关闭 |
| 其他 | 缓存、gzip、限速、普通访问日志和 WAF 攻击日志写出关闭 |
各请求均使用独立脚本并携带唯一编号:
| 场景 | 请求 |
|---|---|
| 正常 GET | GET /waf-perf?id=<唯一编号> |
| SQLi | id=<唯一编号>%27%20OR%20%271%27=%271%27--%20 |
| XSS | JSON POST:{"comment":"<script>alert(<唯一编号>)</script>"} |
正式命令模板:
WAF_PERF_HOST=<waf-off.perf.test|waf-on.perf.test> \
wrk -t8 -c5000 -d30s --timeout 30s --latency \
-s /root/waf-perf/<normal_get.lua|sqli.lua|xss.lua> \
http://172.29.4.134/waf-perf