Caddy 频率限制实战:rate_limit 配置
目录
为什么要做频率限制
公共网络服务迟早会碰到流量滥用:
- 爬虫爬取全站内容
- 暴力破解登录接口
- CC 攻击占用带宽
- 脚本小子刷 API
频率限制是最基础的防御手段。Caddy 的 rate_limit 插件实现的是令牌桶算法,在请求到达反向代理之前进行限流判断,避免压力传递到后端服务。
定义限流区域
example.com {
rate_limit {
zone dynamic_zone {
key {client_ip}
events 50
window 10s
}
log_key
}
}zone 参数详解
key {client_ip}:按客户端 IP 区分。Caddy 如果配置了trusted_proxies,这里的 IP 是从X-Forwarded-For提取的真实客户端 IP,而不是代理的 IP。events 50:在时间窗口内允许的最大请求数。window 10s:时间窗口,这里是 1 秒。
合起来就是:每个客户端 IP 每 10 秒最多 50 个请求,超过的请求返回 429 Too Many Requests。
log_key 调试
log_key开启后,Caddy 会在访问日志中输出被限流的客户端 key(IP 地址)。格式类似:
rate_limit exceeded for key: 192.168.1.100上线新服务时建议先开启 log_key,观察正常用户的请求频率,再确定合适的阈值。
总结
Caddy 的 rate_limit 插件提供了简单易用的限流能力,但不是银弹。全局启用容易误伤正常用户,精细配置又需要针对每个站点单独调整。
参考链接
添加评论