速率限制规则用于定义匹配表达式的请求速率阈值,以及达到阈值后的处理动作。您可以用速率限制规则防止网站与 API 被滥用,例如保护登录接口免受暴力破解,或限制单一客户端在固定时间窗口内的 API 调用次数。
在 新版安全仪表板中,速率限制规则是可用 安全规则 类型之一。安全规则会对匹配指定过滤条件的入站请求执行与安全相关的动作。
部分 Enterprise 客户可在账户级创建速率限制规则集,并部署到多个 Enterprise Zone(区域)。
与 Cloudflare 规则引擎中其他规则一样,速率限制规则包含以下基础参数:
- 使用 Rules language 指定流量匹配条件的表达式。
- 当规则匹配且满足任何附加条件时要执行的操作。对于 rate limiting rules,当速率达到指定限制时执行该操作。
除上述两个参数外,rate limiting rules 还需要以下附加参数:
- Characteristics(特征):定义 Cloudflare 如何跟踪此规则速率的参数集。
- Period(周期):评估速率时考虑的时间段(秒)。
- Requests per period(每个周期的请求数):在时间段内触发 rate limiting rule 的请求数。
- Duration(持续时间或缓解超时):达到速率后,速率限制规则在此字段定义的时间段内阻止后续请求。
- Action behavior(操作行为):默认情况下,Cloudflare 会在配置的持续时间(或缓解超时)内应用规则操作,无论此期间的请求速率如何。部分 Enterprise 客户可配置规则以限制超过最大速率的请求,当速率低于配置限制时允许传入请求。
请参阅 速率限制参数了解必需参数与可选参数。
请参阅 Cloudflare 如何确定请求速率,了解这些参数如何用于计算入站请求速率。
如果你同时使用多种应用安全功能(如 custom rules、Managed Rules 和 Super Bot Fight Mode),了解这些功能如何交互以及它们的执行顺序非常重要。更多信息请参阅安全功能互操作性。
-
速率限制规则按顺序评估,部分动作(如 拦截(Block))会中断后续规则评估。动作与行为详情请参阅 动作(Actions)。
-
速率限制规则不适合提供精确到单个源站请求数上限。检测请求与更新计数器存在最高几秒延迟,因此在 Cloudflare 执行阻断或挑战等缓解动作前,仍可能有少量超额请求到达源站。关于计数器范围(包括按数据中心分片)等细节,请参阅 请求速率计算。
-
将速率限制规则应用到通过验证的 bot 可能影响搜索引擎优化(SEO)。更多说明请参见 提升 SEO。
| 功能 | Free | Pro | Business | Enterprise with app security | Enterprise with Advanced Rate Limiting |
|---|---|---|---|---|---|
| 规则表达式中 可用字段 |
Path、Verified Bot | Host、URI、Path、Full URI、Query、Verified Bot | Host、URI、Path、Full URI、Query、Method、Source IP、User Agent、Verified Bot | 通用请求字段、请求标头字段、Verified Bot、Bot Management 字段1 | 通用请求字段、请求标头字段、Verified Bot、Bot Management 字段1、请求正文字段2 |
| 缓存排除 | 否 | 否 | 是 | 是 | 是 |
| 计数特征 | IP | IP | IP、支持 NAT 的 IP | IP、支持 NAT 的 IP | IP、支持 NAT 的 IP、Query、Host、Headers、Cookie、ASN、Country、Path、JA3/JA4 Fingerprint1、JSON 字段值2、Body2、表单输入值2、Custom |
| 自定义计数表达式 | 否 | 否 | 是 | 是 | 是 |
| 计数表达式中 可用字段 |
不适用 | 不适用 | 全部规则表达式字段、响应代码、响应标头 | 全部规则表达式字段、响应代码、响应标头 | 全部规则表达式字段、响应代码、响应标头 |
| 计数模型 | 请求数 | 请求数 | 请求数 | 请求数 | 请求数、复杂度分数 |
| 速率限制 操作行为 |
在缓解期内执行操作 | 在缓解期内执行操作 | 在缓解期内执行操作 | 在缓解期内执行操作;超过速率时以 block 操作限流 | 在缓解期内执行操作;超过速率时以 block 操作限流 |
| 计数周期 | 10 s | 最长 1 min 的全部支持值3 | 最长 10 min 的全部支持值3 | 最长 65,535 s 的全部支持值3 | 最长 65,535 s 的全部支持值3 |
| 缓解超时周期 | 10 s | 最长 1 h 的全部支持值3 | 最长 1 day 的全部支持值3 | 最长 1 day 的全部支持值3 4 | 最长 1 day 的全部支持值3 4 |
| 规则数量 | 1 | 2 | 5 | 1005 | 100 |
脚注
1: 仅面向已购买 Bot Management 的 Enterprise 客户。
2: 可用性取决于你的 WAF 计划。
3: 支持的计数/缓解周期值列表(秒):
10、15、20、30、40、45、60(1 min)、90、120(2 min)、180(3 min)、240(4 min)、300(5 min)、480、600(10 min)、900、1200(20 min)、1800、2400、3600(1 h)、65535、86400(1 day)。
并非所有计划都支持全部取值。
4: Enterprise 客户可通过 API 指定自定义缓解超时周期。
5: Enterprise 客户须在合同中包含应用安全(application security)才能使用速率限制规则。规则数量取决于具体合同条款。
-
仅面向已购买 Bot Management 的 Enterprise 客户。 ↩ ↩2 ↩3
-
以秒为单位支持的周期值:
10、15、20、30、40、45、60(1 min)、90、120(2 min)、180(3 min)、240(4 min)、300(5 min)、480、600(10 min)、900、1200(20 min)、1800、2400、3600(1 h)、65535、86400(1 day)。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 -
Enterprise 客户须在合同中包含应用安全(application security)才能使用速率限制规则。规则数量取决于具体合同条款。 ↩
请参阅以下资源:
关于 Terraform 配置示例,请参阅 使用 Terraform 配置速率限制规则。
-
Cloudflare 速率限制(旧版本,已停止提供): 旧版本速率限制规则文档(按用量计费)。