跳转到内容
搜索文档

速率限制(旧版)

最后更新 查看 MarkdownAgent 设置

Cloudflare 速率限制会自动识别并缓解针对特定 URL 或整个域名的过高请求速率。

请求速率会在各个 Cloudflare 数据中心本地计算。速率限制最常见的用途包括:

当单个 IPv4 地址或 IPv6 /64 地址段超过规则阈值后,后续对源站的请求将返回 HTTP 429 并被拦截。响应中会包含 Retry-After 头,告知客户端何时可继续发送请求。

速率限制与 SEO

(旧版)缓存资源和已知搜索引擎爬虫都会被排除在速率限制规则之外,因此不会影响您的网站SEO 排名


可用性

可创建的速率限制规则数量取决于域名所属套餐:

套餐 规则 匹配响应标头的规则 动作 动作时长 请求周期
Free 1 1 拦截(Block) 1 分钟或 1 小时 10 秒或 1 分钟
Pro 10 1 拦截(Block)、非交互式质询(Non-Interactive Challenge)、受管质询(Managed Challenge)、交互式质询(Interactive Challenge)、或记录(Log) 1 分钟或 1 小时 10 秒或 1 分钟
Business 15 10 拦截(Block)、非交互式质询(Non-Interactive Challenge)、受管质询(Managed Challenge)、交互式质询(Interactive Challenge)、或记录(Log) 1 分钟、1 小时或 24 小时 10 秒、1 分钟或 10 分钟
Enterprise 100 10 拦截(Block)、非交互式质询(Non-Interactive Challenge)、受管质询(Managed Challenge)、交互式质询(Interactive Challenge)、或记录(Log) 10 秒到 86,400 秒(24 小时)内任意时长 10 秒到 3,600 秒(1 小时)内任意值

Cloudflare 速率限制提供分级配置权限,不同套餐可用功能不同。下表说明了基于套餐可用的配置能力:

顺序 任务 适用套餐
1 配置基础速率限制规则 所有套餐
2 配置高级筛选条件 Business 和 Enterprise 套餐
3 配置高级响应 Business 和 Enterprise 套餐
4 配置 Bypass 选项 Enterprise 套餐

速率限制规则组件

一个速率限制规则由三个独立组件组成:

请求匹配条件

入站请求可基于请求路径、请求方案、请求方法以及(可选)源站响应码进行匹配。

请求路径

例如:

  • http://example.com/example
  • http://example.com/example/*

请求路径不区分大小写。模式无法匹配问号(?)或锚点(#)后的内容。星号(*)可匹配任意字符序列(包括空序列),例如:

  • *.example.com/* 可匹配 example.com 的任意子域名下的任意路径。
  • *example.com/example.html 可匹配 example.com 或其任意子域名上的 example.html
  • * 可匹配您的站点中的任意页面。

example.com/pathexample.com/path/ 不同。唯一例外是首页:example.com 匹配 example.com/

请求方案

可选 _HTTP__HTTPS_。如未指定,则同时匹配两者,规则中将显示 __ALL__

请求方法

可选 _POST__GET_。如未指定,则匹配全部方法,规则中将显示 __ALL__

(可选)源站响应码

例如,仅在源站返回 HTTP 401403 响应码时触发速率限制规则。若规则匹配到响应码条件,后续来自该客户端的请求将被拦截,且不再受源站响应码影响。

速率匹配条件

一条规则可按同一客户端在一定时间内的请求数量进行匹配。

请求数量

请至少填写 2 个请求。若要对单次请求进行拦截,请让该路径不可访问,例如将源站配置为返回 HTTP 403 状态码。

请求周期

当客户端请求在指定时段内超过阈值时,规则将被触发。

规则缓解动作

规则缓解动作由以下两部分组成:

  • 缓解动作
  • 封禁时长

缓解动作

速率限制动作依据套餐权限定义:

  • Block(拦截):当超过阈值时,Cloudflare 返回 HTTP 429 错误。
  • Non-Interactive Challenge(非交互式质询):访问者需完成 Cloudflare 的非交互式质询,质询通过后放行请求。
  • Managed Challenge(受管质询):访问者需完成 Cloudflare 基于请求特征动态下发的质询,质询通过后放行请求。
  • Interactive Challenge(交互式质询):访问者需完成交互式质询,质询通过后放行请求。
  • Log(记录):将请求记录到 Cloudflare Logs。用于在生产环境前测试规则。

质询动作的详细说明,请参见质询

封禁时长

将封禁时长设置低于阈值时,系统会自动将时长提升到阈值。

当未配置自定义错误页时,命中速率限制的请求会显示默认 HTML 页面。Business 和 Enterprise 客户可在规则中直接配置返回内容。详情请参见配置高级响应


识别速率限制阈值

可通过以下方式估算 Cloudflare 速率限制的通用阈值:取 24 小时内未缓存请求量除以同段时间内的独立访客数,再除以每次访问的平均时长(分钟)。最后乘以 4(或更高),得到网站每分钟的预估阈值。通常该值设置为高于 4 更合适,因为攻击流量往往比正常流量高出一个数量级以上。

要为特定 URL 计算速率限制阈值,请使用该 URL 在 24 小时内的未缓存请求与独立访客数据。请结合用户反馈和监控结果调节阈值。


任务 1:配置基础速率限制规则

以下章节介绍常见的两种速率限制规则配置方式。

启用“保护登录(Protect your login)”

速率限制提供一键 Protect your login(保护登录) 功能,可在 5 分钟内收到超过 5 次 POST 请求时封禁该客户端 15 分钟。该设置可阻挡大多数暴力破解尝试。

  1. 登录 Cloudflare 仪表板,选择您的账户和域名。
  2. 进入 Security(安全) > WAF > Rate limiting rules(速率限制规则)
  3. Rate Limiting(速率限制) 下选择 Protect your login(保护登录)
  4. 在弹出的 Protect your login(保护登录) 对话框中填写 Rule Name(规则名称)Enter your login URL(登录地址)
  5. 选择 Save(保存)
  6. Rule Name(规则名称) 会出现在您的 Rate Limiting(速率限制) 规则列表中。

创建自定义速率限制规则

  1. 登录 Cloudflare 仪表板,选择您的账户和域名。

  2. 进入 Security(安全) > WAF > Rate limiting rules(速率限制规则)

  3. 选择 Create rate limiting rule(创建速率限制规则)。系统会弹出一个对话框,在其中填写新规则的详细信息。

    示例速率限制规则弹窗:当 IP 地址在 1 小时内超过每分钟 150 次请求时,该 IP 会被拦截。
  4. Rule Name(可识别的规则名称) 中输入可识别的规则名称。

  5. If Traffic Matching the URL(匹配 URL 的流量) 中,从下拉框选择 HTTP 协议并输入 URL。

  6. from the same IP address exceeds(同一 IP 地址请求超过) 中输入大于 1 的整数,表示采样周期内的请求数量。

  7. requests per(计数周期) 中选择计数周期(统计请求数的时间段)。Enterprise 套餐可手动输入 10 秒到 3,600 秒(1 小时)之间的值。

  8. Then(然后) 中依据套餐选择可用动作。详见规则缓解动作

  9. 如果选择的是 Block(拦截)Log(记录),请在 matching traffic from that visitor for(该访问者持续匹配时长) 中设置命中阈值后动作持续时长。Enterprise 套餐可手动输入 10 秒到 86,400 秒(24 小时)之间的任意值。

  10. 点击 Save and Deploy(保存并部署) 激活新规则。

新建规则会显示在速率限制规则列表中。

通常情况下,降低阈值建议:

  1. 保留现有规则,同时添加一条使用更低阈值的新规则。
  2. 新规则生效后,等待旧规则的动作持续时长结束后再删除旧规则。

若需提高阈值(例如出现误伤正常客户端),可在现有规则内直接调高阈值。


任务 2:配置高级筛选条件(仅 Business 与 Enterprise 套餐)

高级筛选条件允许您为速率限制规则配置匹配的 HTTP 方法、响应标头和值源站响应码。

为新建或现有规则设置高级筛选条件:

  1. 展开 Advanced Criteria(高级筛选条件)

    可为速率限制规则配置高级筛选条件时可用的字段。
  2. Method(s)(方法) 中选择一个值。默认值为 ANY,表示匹配所有 HTTP 方法。

  3. 通过 HTTP 响应标头(HTTP Response Header(s)) 筛选。点击 Add header response field(添加响应标头字段) 可添加您的源站返回标头。

    默认会添加 CF-Cache-Status 标头,用于让 Cloudflare 优先返回缓存资源并避免对缓存资源施加速率限制。若希望缓存资源也受速率限制,可在该项点选 X 移除该标头,或启用 Also apply rate limit to cached assets(也将速率限制应用到已缓存资源)

    若您在 HTTP 响应标头(HTTP Response Header(s)) 下添加多个标头,默认采用 AND 逻辑。要排除某个标头,请使用 Not Equals(不等于) 选项。标头名称不区分大小写。

  4. Origin Response code(s)(源站响应码) 下输入要匹配的 HTTP 响应码数字,多项请用英文逗号分隔(例如:401, 403)。

  5. (可选)按您的套餐配置其他速率限制功能。

  6. 点击 Save and Deploy(保存并部署)


任务 3:配置高级响应(仅 Business 与 Enterprise 套餐)

高级响应用于配置规则触发阈值后,Cloudflare 返回给客户端的内容格式。若要返回静态纯文本或 JSON,可选择该功能。

  1. 扩展配置 Advanced Response(高级响应)

    速率限制规则中可配置高级响应时可用的字段。
  2. Response type(响应类型) 中选择除默认值外的格式:_Custom JSON(自定义 JSON)__Custom TEXT(自定义文本)_

  3. 输入希望返回的纯文本或 JSON 内容,最大支持 32 KB。

  4. (可选)按套餐配置其他速率限制功能。

  5. 点击 Save and Deploy(保存并部署)

使用自定义 HTML 页面或重定向

如需展示自定义 HTML 页面,请在仪表板中为 HTTP 429(请求过多)配置自定义错误页。若在 **Response type(响应类型)(该字段默认值)**中选择 Default Cloudflare Rate Limiting Page(默认 Cloudflare 速率限制页面),Cloudflare 会展示该页面。

可按以下方式将被速率限制的客户端重定向到特定 URL:

  1. 在您的服务器上创建一个 HTML 页面,并将其设置为最终要显示页面的跳转地址。页面内容中请包含 meta refresh 标签,示例如下:

    <!doctype html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>自定义速率限制页面</title>
    		<meta
    			http-equiv="refresh"
    			content="0; url='https://yourzonename/block'"
    		/>
    	</head>
    	<body></body>
    </html>

    记录该页面的公开 URL。

  2. 在 Cloudflare 仪表板中,进入 Settings(设置) 页面。

    Go to Configurations ↗
  3. 打开 Error Pages(错误页)

  4. Rate limiting block(速率限制拦截页) 旁边点击三点菜单 > Edit(编辑)

  5. 选择 Custom page(自定义页面)

  6. Custom page address(自定义页面地址) 中填写您在服务器上创建的页面 URL(即包含 meta refresh 标签的页面)。

  7. 选择 Save(保存)

如果您希望返回纯文本或 JSON,但内容大于 32 KB,可采用同样方式。此时重定向 URL 应指向待展示的纯文本或 JSON 资源。


任务 4:配置绕过(Bypass)选项(仅 Enterprise 套餐)

Bypass(绕过) 会为一组 URL 创建例外(允许列表),使其即使命中速率限制规则也不执行任何动作。

配置 Bypass(绕过)

  1. 展开 Bypass(绕过)

  2. Bypass rule for these URLs(需绕过的 URL 列表) 中填入需要豁免的 URL,每行填写一个。URL 中显式写入的 HTTPHTTPS 在规则保存时会被移除,并改为同时匹配两种协议。

    配置两个速率限制规则豁免 URL 的示例(每行一个)。
  3. (可选)按套餐配置其他速率限制功能。

  4. 点击 Save and Deploy(保存并部署)


分析

Analytics & logs(分析与日志) > Security(安全) 查看区域级速率限制分析。速率限制图表中,实线表示模拟匹配流量,虚线表示实际被拦截流量。通过 Cloudflare Logs 能够查看由速率限制规则生成的日志,但该日志仅 Enterprise 客户可见。

Cloudflare 对被拦截的请求返回 HTTP 429。关于各地区被拦截请求的明细,可在 Analytics(分析) > Traffic(流量) 中的 Status codes(状态码) 页面查看(仅 Enterprise 可见)。


规则执行顺序

速率限制规则会按“最新创建 -> 最旧创建”的顺序逐条评估。

例如,如果一个请求同时匹配以下两条规则:

  • 规则 #1:匹配 test.example.com(创建于 2024-03-01)
  • 规则 #2:匹配 *.example.com*(创建于 2024-03-12)

因此,在上述示例中会优先触发规则 #2,因为它是最近创建的规则。

另外,如果匹配命中后 WAF 执行的是 Log 动作(该动作不终止处理),系统会继续评估后续速率限制规则。若 WAF 执行的是其他动作,其余规则将不再继续评估。


限制

速率限制旨在抑制超出用户定义速率的流量突发,而不是精确控制每秒可达源站的请求数。系统在检测请求与更新内部计数器之间可能存在延迟,通常可达数秒,因此在阻断或质询动作生效前,仍可能有部分超额请求到达源站。


相关资源

这篇文档对您有帮助吗?