apache 的 proxypass 本身不支持限频,需依赖 mod_qos、mod_evasive 或 lua+redis 实现分级限流:mod_qos 用于子域名/路径级 qps 控制,mod_evasive 作 ip 级防刷兜底,lua+redis 支持用户维度动态限频;生产环境推荐交由专业网关处理。
apache 的 proxypass 本身不提供高频访问限制能力,它只负责请求转发。真正的限频必须在代理层前置干预,靠组合模块实现粗粒度压制,而不是指望 proxypass 自带功能。
用 mod_qos 实现子域名或路径级请求频率压制
这是 Apache 生态中对高频访问最实用的方案,支持基于 Host 头和 URL 路径匹配,能贴近“按接口限 QPS”的需求:
- 在对应
<virtualhost></virtualhost>或<location></location>中写:<if> QS_SrvMaxReqPerSec 100 QS_LocRequestLimit /v1/search 20 </if>
-
QS_SrvMaxReqPerSec控制整个子域名每秒总请求数; -
QS_LocRequestLimit绑定到具体路径,如/v1/search每秒最多 20 次; - 注意:它是秒级计数,无滑动窗口,且状态不跨进程共享,适合中低并发场景。
用 mod_evasive 做 IP 级防刷兜底
适合拦截突发扫描、暴力调用等非正常高频行为,不适用于业务级 QPS 控制:
- 配置示例(全局生效,但可配合
<location></location>隔离路径):<ifmodule mod_evasive20.c> DOSPageCount 5 DOSPageInterval 1 DOSSiteCount 100 DOSSiteInterval 5 DOSBlockingPeriod 60 </ifmodule>
- 表示:单 IP 1 秒内对同一页面最多 5 次请求,5 秒内全站最多 100 次,超限封 60 秒;
- 它不区分子域名,但因路径不同(如
api.example.com/loginvsadmin.example.com/),统计是独立的。
用 Lua + Redis 实现用户/IP 维度的动态限频
需要启用 mod_lua 和外部 Redis,适合需按 X-API-Key 或 user_id 计数的场景:
- 在
<location></location>中嵌入 Lua 脚本,读取请求头、构造 key、调 Redis incr+expire; - 若计数超阈值(如 30 次/分钟),直接返回
429 Too Many Requests并带Retry-After: 60; - 示例 key 可设为
rate:api_key_abc123:/v1/pay,实现接口+用户双维度控制。
把高频限流交给专业网关更合理
Apache 不是限流组件,生产环境应让它退为轻量路由层:
-
ProxyPass /api http://nginx-limiter,后端交给 Nginx 的limit_req或 APISIX 的limit-count插件; - 这些网关支持令牌桶、分布式 Redis 共享计数、动态规则热更新、多维 key(remote_addr + path + app_id);
- Apache 只保留
ProxyPreserveHost On和基础超时配置,避免干扰下游限流标识。
不复杂但容易忽略
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。










