apache本身不原生支持高峰期自动限流,需结合apisix/kong等网关或nginx+openresty实现动态限流闭环。

用 Apache 做反向代理 + 外挂限流网关
这是最常见也最稳妥的方式:让 Apache 专注 SSL 终止、静态文件和路由转发,把动态限流逻辑下沉到专用 API 网关。
- 在 Apache 中配置
ProxyPass将所有 /api/ 请求转发给 APISIX 或 Kong(运行在本地 9080 端口) - 在 APISIX 路由中启用
limit-count插件,并设置time_window: 60和count: 200,再配合 Prometheus + Alertmanager 监控后端响应延迟或错误率 - 当延迟 > 500ms 持续 1 分钟,触发告警并调用 APISIX Admin API 动态降低该路由的
count值(比如从 200 降到 50),实现“高峰自动收缩”
用 Apache + mod_evasive + 自定义脚本做粗粒度自适应
适用于轻量级场景,不能替代专业限流,但可作为兜底防护。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_evasive,配置DOSPageCount 2、DOSSiteCount 50、DOSBlockingPeriod 600 - 写一个定时脚本(如每 30 秒执行),用
curl -s http://localhost/server-status?auto抓取当前并发连接数(BusyWorkers) - 若 BusyWorkers > 80(占总 MaxRequestWorkers 80%),自动重载 Apache 配置,临时启用更严格的
mod_evasive参数,或通过htpasswd临时限制部分 IP 段访问
把 Apache 替换为 Nginx + OpenResty 实现闭环控制
如果你对 Apache 无强依赖,Nginx + Lua 是更自然的选择:它既能做高性能负载均衡,又能用 lua-resty-limit-traffic 实现毫秒级滑动窗口限流,还能读取系统指标(CPU、内存)动态调整阈值。
- 用
balancer_by_lua_block实现加权轮询+健康检查 - 在
access_by_lua_block中调用限流器:local limiter = limit.count:new("api", 100, 60) - 结合
ngx.var.connections_active或os.execute("cat /proc/loadavg | awk '{print $1}'")获取负载,动态降级限流阈值










