apache本身不支持对敏感接口的精细化qps限流,因其缺乏请求级实时计数与滑动窗口能力;可行方案包括:用mod_evasive做路径级防刷、mod_qos做粗粒度每秒请求数限制,或更推荐将apache退为反向代理,由nginx/envoy/apisix等专业网关承担限流职责。

Apache 本身不支持直接对“敏感接口”做精细化流量限制(如按 URL 路径设定 QPS、令牌桶或动态速率),它的原生模块不具备请求级实时计数与滑动窗口能力。但你可以通过组合配置 + 合理架构分层,在 Apache 层实现面向敏感路径的有效流量约束与防护。核心思路是:用 Apache 做路径识别与前置代理,把限流逻辑下沉到更合适的组件,或用兼容模块做粗粒度控制。
明确敏感接口范围,隔离配置作用域
先定义哪些是敏感接口,例如:
/api/v1/admin//user/profile/update/payment/confirm
这些路径应统一归入某个 <location></location> 或虚拟主机内,便于后续策略绑定。
<location>
Require all granted
# 后续限流/拦截规则将在此生效
</location>
注意:Apache 的 LimitRequestRate、MaxConnectionsPerIP 等指令只支持目录级或全局级,不能按每秒请求数(QPS)精确控制,但可作为基础防线。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
用 mod_evasive 实现路径级防刷(轻量敏感接口防护)
适合防御简单暴力调用,对指定路径做 IP + URL 组合计数:
<ifmodule mod_evasive20.c>
DOSPageCount 5 # 同一 IP 在 1 秒内访问同一页面超 5 次即触发
DOSPageInterval 1
DOSSiteCount 100 # 全站每秒总请求数上限(含所有子域名)
DOSSiteInterval 1
DOSBlockingPeriod 300 # 封禁 5 分钟
</ifmodule>
✅ 优势:无需编译,开箱即用
⚠️ 注意:它按 URL 路径 统计,所以 /api/v1/admin/delete 和 /api/v1/user/list 是分开计数的;但它不区分 Host 头,也不支持自定义时间窗口或令牌桶
用 mod_qos 实现基于路径的请求频次粗限(需手动编译)
mod_qos 支持按 <location></location> 设置每秒请求数上限,是 Apache 生态中最接近“敏感接口限流”的方案:
<ifmodule mod_qos.c><location>
QS_LocRequestLimit 10 # 每秒最多 10 个请求
QS_LocRequestPass 1 # 允许首次请求通过(避免误伤)
QS_SrvMaxConnPerIP 3 # 同时最多 3 个连接
</location></ifmodule>
✅ 支持 Host 匹配、路径匹配、IP 限连、响应码拦截
⚠️ 缺陷:不支持分布式计数;高并发下性能开销明显;TLS 握手阶段不可控;配置易出错,调试困难
推荐架构:Apache 仅作反向代理,限流交由专业网关
真正可靠的敏感接口流量控制,应脱离 Apache,改用以下任一方式:
-
前端部署 Nginx:用
limit_req(令牌桶)+limit_conn+geo/map实现 per-path、per-user、per-app 的多维限流 -
接入 APISIX / Kong / Envoy:支持动态规则、插件化限流(
limit-req、limit-count)、熔断、可观测性 -
Java 微服务内部集成 Sentinel / Resilience4j:在业务入口做细粒度资源级控制(如
@SentinelResource("updateProfile"))
Apache 在该架构中职责清晰:
✔ TLS 终止
✔ 路由转发(ProxyPass 到网关或后端集群)
✔ 静态资源服务与基础鉴权
✘ 不承担 QPS 控制、熔断降级、链路追踪等微服务治理功能
补充建议:配合后端增强防护
- 敏感接口返回头中添加
X-RateLimit-Limit、X-RateLimit-Remaining,便于客户端感知 - 后端 Java 应用启用 Spring Cloud Gateway 的
RequestRateLimiter,结合 Redis 实现分布式限流 - 所有敏感操作记录审计日志,并对接 SIEM 系统做异常行为分析(如单 IP 短时高频调用 admin 接口)
不复杂但容易忽略:Apache 的 Timeout 和 ProxyTimeout 必须大于后端限流中间件的排队等待时间,否则会提前断连,导致限流失效。









