apache不支持proxypass内嵌限流,需通过mod_qos实现子域名级限流或交由apisix等网关处理;mod_evasive仅适用于粗粒度cc防护,proxypass本身无流量控制语义。

Apache 本身不支持在 ProxyPass 指令中直接嵌入限流逻辑,也没有原生语法如 ProxyPass /api http://backend/ rate=10r/s 这类写法。所谓“ProxyPass 结合限流”,实际是通过模块协同、分层配置实现的——ProxyPass 负责转发,限流由其他模块(或外部组件)承担。
Apache 原生能力下最贴近的写法:用 mod_qos 绑定 Host + ProxyPass
这是唯一能在 Apache 配置中“靠近” ProxyPass 实现子域名级限流的方案,但需手动编译加载 mod_qos:
- 先启用模块:
LoadModule qos_module modules/mod_qos.so - 在对应子域名的
<virtualhost></virtualhost>中配置:
ProxyPass / http://127.0.0.1:8080/
QS_SrvMaxReqPerSec 50
QS_SrvMaxConnPerIP 10
说明:QS_SrvMaxReqPerSec 是每秒请求数限制,按 Host 头生效;QS_SrvMaxConnPerIP 控制单 IP 并发连接数。注意它不区分路径,也不支持令牌桶或 Redis 后端,仅适合轻量级控制。
更推荐的生产写法:ProxyPass 只做转发,限流交给下游网关
把 ProxyPass 当作纯粹的路由开关,把限流策略下沉到专业组件中,配置简洁且可靠:
- Apache 配置保持干净:
ServerName api.example.com
ProxyPreserveHost On
ProxyPass / http://apisix-gateway:9080/
ProxyPassReverse / http://apisix-gateway:9080/
然后在 APISIX/Kong/Nginx 网关中配置具体限流规则,比如基于 consumer_key 或 X-User-ID 的 QPS 控制,支持滑动窗口、令牌桶、Redis 共享计数等高级能力。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
若必须用 Apache 做基础防护:mod_evasive + ProxyPass 组合
适用于防简单 CC 攻击,不能设精确 QPS,但可配合路径做粗粒度拦截:
- 在虚拟主机内加:
DOSPageCount 5
DOSPageInterval 1
DOSSiteCount 100
DOSSiteInterval 1
DOSBlockingPeriod 60
该配置对 api.example.com/login 和 admin.example.com/api 分别统计,前提是它们映射到不同 <location></location> 或物理路径。它不干预 ProxyPass 流程,而是在请求进入后、转发前触发拦截。
关键提醒:不要试图在 ProxyPass 行内加限流参数
以下写法是无效的,Apache 会报错或忽略:
ProxyPass /api http://backend/ limit=20r/s ← 错误ProxyPass /api http://backend/ burst=5 nodelay ← 错误
ProxyPass 指令只接受协议、地址、可选参数如 keepalive=on、retry=30、acquire=3000 等连接池相关选项,不含任何流量控制语义。










