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 插件提供了简单易用的限流能力,但不是银弹。全局启用容易误伤正常用户,精细配置又需要针对每个站点单独调整。

参考链接

添加评论