apache代理需借助mod_evasive、mod_qos等模块及外部协同实现集群限频,核心是前置限频点并分层控制;mod_evasive提供ip级粗粒度防护,mod_qos支持路径+ip+并发的精细策略,还可联动后端健康状态与外部限频服务统一管控。

Apache 代理本身不内置集群级限频能力,但可通过组合 mod_evasive、mod_ratelimit(基础)、mod_qos(增强)及外部协同机制,实现对后端集群的深度访问频率管控。关键在于:把限频点前置到反向代理层,按 IP、路径、用户或请求特征做分层控制,并与后端健康状态联动。
用 mod_evasive 实现 IP 粒度的粗粒度拦截
这是最常用、部署最快的方案,适合防扫描和简单暴力请求。
- 安装启用:
sudo a2enmod evasive(Debian/Ubuntu)或确保mod_evasive20.c已加载 - 配置建议(写入
/etc/apache2/conf-available/evasive.conf):
DOSHashTableSize 3097
DOSPageCount 3
DOSPageInterval 2
DOSSiteCount 100
DOSSiteInterval 5
DOSBlockingPeriod 60
DOSLogDir "/var/log/apache2/evasive"
说明:每 2 秒内单页面最多 3 次请求,整站 5 秒内最多 100 次;超限 IP 封禁 60 秒。日志路径需提前创建并赋权。
用 mod_qos 实现路径+IP+并发的精细控制
mod_qos 比 mod_evasive 更灵活,支持按 URI、Host、Header、甚至响应码动态限流,适合集群多接口差异化策略。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 安装(需手动编译或第三方源):
apt install libapache2-mod-qos(部分仓库提供) - 典型配置示例(保护 /api/v1/order 提交接口):
QS_SrvMaxConnPerIP 5
QS_Limit 20/60
QS_SrvMaxConn 200
QS_SrvMinDataRate 100 120
含义:
– 单 IP 最大并发连接数 5
– 全局每分钟最多 20 次请求(漏桶式)
– 整个 Location 最大并发连接 200
– 要求最低数据传输速率 100 KB/s,持续超 120 秒则断连(防慢速攻击)
结合后端健康状态做动态限频
当某台后端节点响应变慢或错误率升高时,自动降低其流量权重或触发临时限频,避免雪崩。
- 使用
mod_proxy_balancer+ 自定义监控脚本:
– 配置健康检查:ProxySet lbset=0 retry=30
– 在<proxy balancer:></proxy>中为每个成员设status=+H(启用心跳) - 通过 Apache 的
expr+env变量联动:
– 用 cron 定期调用脚本检测各后端 P99 延迟,写入/tmp/backend_status.env
– 在 Apache 配置中加载:LoadFile /tmp/backend_status.env
– 在 Location 中用Require expr %{ENV:backend_slow} == 'true'触发降级限频规则
对接外部限频服务做统一策略中心
适用于多代理节点、微服务网关共存场景,避免策略分散。
- 在 Apache 中用
mod_lua或mod_proxy_http+mod_headers向 Redis 或专用限频服务(如 Kong Rate Limiting Plugin、RedisLabs RedisJSON)发起预检 - 简单 Lua 示例(需启用
mod_lua):
LuaHookAccessPolicy "rate_limit.lua" run all
rate_limit.lua 内可解析 REMOTE_ADDR 和 REQUEST_URI,调用 redis:incr + expire 实现滑动窗口计数,返回 DECLINED 或 OK 控制放行。










