apache本身不支持按子域名直接设置qps或带宽配额;可用mod_evasive实现ip+路径级防刷、mod_limitipconn限制每ip并发连接数、mod_qos(需手动编译)支持host头匹配的粗粒度限流,但生产环境推荐apache仅作反向代理,将限流交由nginx、envoy或apisix等专业网关处理。

Apache 本身不支持按子域名直接设置请求频率(QPS)或带宽配额这类精细化限流策略。VirtualHost 只负责路由和配置隔离,没有内置的每秒请求数、令牌桶或基于 Host 头的动态计数器。所有原生限速指令(如 LimitRequestRate、MaxRequestWorkers)都是全局或目录级的,无法天然绑定到某个 ServerName www.api.example.com 上做独立控制。
用 mod_evasive 实现子域名级基础防刷
该模块适合防御简单暴力请求,能按 IP + URL 路径维度粗略拦截,但不区分子域名本身。若多个子域名共用同一 Apache 实例,需配合 <location></location> 或 <directory></directory> 做路径隔离:
- 启用后,在虚拟主机配置中添加:
DOSPageCount 3
DOSPageInterval 1
DOSSiteCount 50
DOSSiteInterval 1
DOSBlockingPeriod 60 - 它对
api.example.com/v1/users和admin.example.com/login是分别统计的,前提是这两个路径映射到不同物理目录或 Location 段 - 注意:不支持按 Host 头精确分流计数,也无法设定“每秒 20 次”这种硬性 QPS 上限
用 mod_limitipconn 控制子域名并发连接数
这是最接近“子域名粒度”的原生方案,通过在对应 VirtualHost 内配置,可限制该子域名下每个客户端 IP 的最大并发连接数:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在
<virtualhost></virtualhost>块中加入:
MaxConnectionsPerIP 8
NoIPLimit image/* - 当用户访问
download.example.com时,最多维持 8 个活跃 TCP 连接;超过则返回 503 - 适用于防止多线程下载或慢速攻击,但不控制请求频次或响应带宽
用 mod_qos 实现较精细的子域名限流(需手动编译)
mod_qos 是唯一较成熟的第三方模块,支持基于 Host 头的规则,但配置复杂、调试困难,且不支持 TLS 握手阶段:
- 必须显式加载:
LoadModule qos_module modules/mod_qos.so - 在子域名 VirtualHost 中写:
QS_SrvMaxReqPerSec 100
QS_SrvMaxConnPerIP 20 - 关键限制:QS_SrvMaxReqPerSec 默认是全站总值,除非配合
QS_LocRequestLimit+<location></location>绑定路径,否则不是每个子域名独享配额 - 建议仅用于中小流量场景,高可用环境应移交专业网关
生产推荐:Apache 退为路由层,限流交给专用组件
真正可靠的子域名级 QPS/带宽/并发控制,应让 Apache 只做反向代理,把限流逻辑下沉到更合适的工具:
- 典型链路:Client → Apache (proxy_pass) → Nginx(含 limit_req / limit_conn)
- 或接入 Envoy、APISIX 等云原生网关,它们原生支持 host-level 流量策略,例如 APISIX 可为
pay.example.com单独配置“每秒 500 请求,突发 1000,带宽上限 2MB/s” - 优势:策略热更新、指标可观测、支持熔断与降级,且不干扰 Apache 的稳定性和 SSL 终结能力










