Apache的mod_proxy本身不支持限流,需结合mod_evasive(IP级基础频控)、mod_qos(路径+IP双维度限流)或mod_security(动态语义化限频)实现单IP请求频率限制。Apache 的 `mod_proxy` 本身不提供请求频率限制功能,它只负责转发请求。要实现**单 IP 请求频率限制**,必须在 `ProxyPass` 前插入访问控制与限流逻辑,借助其他模块协同完成。以下是三种实用、可落地的方案,按推荐度和精度排序:
用 mod_evasive 实现 IP 级基础频控
适合防御简单暴力请求(如登录爆破、接口枚举),配置轻量、开箱即用:
- 启用后对每个 IP 统计单位时间内的请求数,超阈值则临时封禁
- 关键参数示例:DOSPageCount 5(同一路径每秒最多 5 次)、DOSSiteCount 50(全站每秒最多 50 次)、DOSBlockingPeriod 60(封禁 60 秒)
- 注意:它不区分子域名或接口路径,也不支持滑动窗口;若需只限代理路径,建议配合
<location></location>使用,避免影响静态资源
用 mod_qos 实现路径+IP 双维度限流
比 mod_evasive 更精细,支持绑定具体代理路径,且可限制并发连接数,防资源耗尽更有效:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 需手动编译加载
mod_qos,并在 VirtualHost 或 Location 中配置 - 示例:限制所有访问
/api/的 IP 每秒最多 10 次请求,且每个 IP 最多维持 5 个连接<location><br> QS_LocRequestLimit 10<br> QS_SrvMaxConnPerIP 5<br> ProxyPass http://backend:8080/<br></location>
- 该模块统计的是真实 TCP 连接状态,对 Keep-Alive 和慢速攻击更敏感,但计数为秒级、不跨进程共享
用 mod_security + 自定义变量做动态计数
最适合对特定动态接口(如 /api/login)做语义化限频,支持组合维度、精准放行:
- 在
phase:1(仅解析请求头)中触发,低开销、不读请求体 - 示例规则:对 POST 到
/api/login的请求,按 IP + User-Agent 组合计数,60 秒内超 5 次返回 429SecRule REQUEST_URI "^/api/login$" "phase:1,pass,nolog,setvar:ip_ua_login=%{REMOTE_ADDR}_%{HTTP_USER_AGENT},setvar:ip_ua_login=+1,expirevar:ip_ua_login=60"SecRule VAR:ip_ua_login "@gt 5" "phase:1,deny,status:429,msg:'Too many login attempts'" - 可排除健康检查、静态资源,支持哈希参数(如搜索关键词)防枚举,误杀率低










