最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
怎样通过 Apache 对动态接口进行频率限制
时间:2026-07-14 08:54:58 编辑:袖梨 来源:一聚教程网
Apache需借助mod_security等模块实现动态接口精细化限频,应精准识别/api/等业务路径、排除静态资源与健康检查,采用IP+User-Agent或参数哈希组合计数,规则置于phase:1并设合理expirevar与阈值。
Apache 本身不支持直接对动态接口做带时间窗口、跨请求计数的精细化频率限制,必须借助第三方模块(如 mod_security 或 mod_evasive)配合路径识别和状态管理来实现。关键不是“全量限速”,而是精准聚焦业务接口、避开静态资源与健康检查,同时避免误杀正常用户。
只对真实动态接口路径启用限频
动态接口通常有明确特征:路径含 /api/、/v1/、/login、/search 等,且方法多为 GET/POST。应严格排除非业务流量:
- 用
SecRule REQUEST_URI ".(js|css|png|jpg|woff2)$" "phase:1,nolog,allow"跳过所有静态资源 - 加
SecRule REQUEST_URI "^/health$" "phase:1,nolog,allow"放行健康检查 - 仅对目标路径生效,例如:
SecRule REQUEST_URI "^/api/login$" "phase:1,pass,nolog,setvar:ip_login=+1"
用组合维度计数,防 CDN/NAT 下误封
单靠 IP 计数在共享出口环境下极易误伤。应按接口语义选择更稳定维度:
- 登录类接口:用
IP + User-Agent组合,降低共用公网 IP 的误判率 - 搜索类接口:用
IP + 参数哈希(如@md5(%{ARGS.q})),防止恶意枚举相同关键词 - 避免使用
DOSSiteCount这类全局统计,它无法区分首页刷新和爆破后台
规则放在 phase:1,禁用日志,拦截返回 429
高频规则若在 phase:2 执行,需解析请求体(尤其 POST),CPU 和内存开销陡增。优化要点:
- 所有计数规则统一放在
phase:1(仅解析请求行和头,不读 body) - 用
nolog,pass,不记录匹配过程;只在真正触发拦截时写日志 - 拦截动作用
status:429,不跳转、不渲染页面,减少响应开销
设合理 expirevar 时间与阈值
变量生命周期太长会堆积内存,太短则失去限速意义。按场景分级设置:
- 防爬虫瞬时打点(如 /search?q=test):expirevar 设
10秒,阈值@gt 30 - 防暴力登录(如 /api/login):expirevar 设
60秒,阈值@gt 5 - 定期检查
/var/cache/mod_security目录大小,持续超 50MB 说明变量未清理,需核查 expirevar 是否生效
相关文章
- 幻想少女公会冰系双神队怎么搭配 07-15
- Procreate只能画直线怎么解决 07-15
- 《神探杰克鼠》大家都爱雷射枪成就解锁指南 07-15
- 《神探杰克鼠》干得好成就解锁指南 07-15
- herve-ves/open-apple-style-ppt-maker-skill:Apple 风不是滤镜,是 JSON-first 纪律 07-15
- 星球大战 当凯洛·伦遇见达斯·维达会发生什么 07-15