跳转到内容
搜索文档

速率限制(旧版)

最后更新 查看 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/path 与 example.com/path/ 不同。唯一例外是首页:example.com 匹配 example.com/。

请求方案

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

请求方法

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

(可选)源站响应码

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

速率匹配条件

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

请求数量

请至少填写 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 中显式写入的 HTTP 或 HTTPS 在规则保存时会被移除,并改为同时匹配两种协议。

    配置两个速率限制规则豁免 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 执行的是其他动作,其余规则将不再继续评估。


限制

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


相关资源

这篇文档对您有帮助吗?