Apache 本身不内置限流和细粒度权限控制,但可通过 mod_qos、mod_evasive、mod_proxy 等模块组合实现代理级流控;推荐用 mod_qos 实现 IP 频次与 API Token 双校验,复杂场景应下沉鉴权至后端服务。

Apache 本身不内置限流(rate limiting)和细粒度权限控制功能,但可通过模块组合实现“访问频率限制 + 权限校验”的代理级流控。核心依赖 mod_proxy、mod_ratelimit(简单带宽限速)、mod_evasive(防暴力请求)以及更推荐的 mod_qos 或结合外部工具如 mod_authz_core + 自定义脚本/后端鉴权服务。
用 mod_qos 实现请求频次与 IP 权限双控
mod_qos 是 Apache 下成熟、灵活的 QoS 模块,支持基于 IP、URL、Header、User-Agent 等维度的速率限制与访问授权。需先编译加载(Debian/Ubuntu 可通过 libapache2-mod-qos 安装)。
- 在虚拟主机或 Location 块中配置每 IP 每分钟最多 60 次请求:
QS_LocRequestLimit 60 /api/ 60
- 拒绝未携带合法 API Token 的请求:
QS_SecretKey "your-shared-secret"<br>QS_AuthTokenHeader "X-API-Key"<br>QS_AuthTokenRequired on
- 对高风险路径(如登录接口)启用突发保护+黑名单自动封禁:
QS_SrvMaxConnPerIP 10<br>QS_SrvMaxConnPerIPTrack on<br>QS_SrvMaxConnPerIPTimeout 300
配合 mod_authz_core + 外部鉴权服务做动态权限流控
当权限规则较复杂(如按用户角色、配额余额、时间窗口动态放行),建议 Apache 仅做代理和前置拦截,将鉴权逻辑下沉到独立服务(如 OAuth2 网关或自研 Auth API)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用
mod_proxy_http将请求头(如X-Forwarded-For、Authorization)透传给鉴权服务 - 用
mod_rewrite+RewriteCond调用鉴权服务(通过prg://或反向代理方式),根据返回状态码(如 403/429)中断请求:RewriteCond "%{LA-U:REMOTE_USER}" ^$<br>RewriteRule ^/api/ - [E=AUTH_CHECK:1]<br>SetEnvIfNoCase AUTH_CHECK 1 auth_required=1<br>AuthType None<br>Require expr %{ENV:auth_required} != '1' || req('X-Auth-Status') == 'OK' - 实际鉴权由后端服务完成,并返回响应头
X-Auth-Status: OK或X-RateLimit-Remaining: 12,供前端或日志监控使用
轻量替代方案:用 mod_evasive + 自定义 Header 鉴权
适用于中小流量、无需复杂策略的场景。搭配基础 token 校验即可快速上线。
- 启用
mod_evasive防扫描类攻击:DOSEngine on<br>DOSLogDir "/var/log/apache2/evasive"<br>DOSPageCount 5<br>DOSSiteCount 50<br>DOSPageInterval 2<br>DOSSiteInterval 2<br>DOSBlockingPeriod 600
- 用
mod_headers和mod_setenvif实现简易 token 白名单:SetEnvIfNoCase Authorization "Bearer ([a-zA-Z0-9+/]+={0,2})" VALID_TOKEN<br>Require env VALID_TOKEN - 注意:该方式无速率统计,仅作准入控制;token 需预先配置或由后端签发并同步至 Apache 配置(不推荐硬编码敏感密钥)
关键提醒与运维建议
所有流控策略都应配合日志与监控,避免误伤正常用户或掩盖真实瓶颈。
- 务必开启
%{qos}n或自定义日志字段记录限流事件,例如:LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %{qos}n" qos_combined - 不要在负载均衡层(如 AWS ALB)和 Apache 层重复限流,易导致阈值叠加失效
- 若后端已自带限流(如 Spring Cloud Gateway 的 Redis RateLimiter),Apache 层建议只做基础防护和权限透传,避免多层冗余
- 重启 Apache 前始终运行
apachectl configtest,mod_qos配置错误可能导致服务无法启动

















