You need to enable JavaScript to run this app.
内容分发网络

内容分发网络

复制全文
流量安全
高级频次控制
复制全文
高级频次控制

高级频次控制是火山引擎内容分发网络(CDN)提供的一项安全功能,用于精准地管理和控制客户端的访问行为。通过配置频次控制策略,可以有效识别和拦截异常的高频请求,从而抵御盗刷、DDoS 攻击等恶意行为,保障业务的稳定运行。

要使用高级频次控制,请 提交工单

每个域名支持配置 3 条策略,主账号下最多可以配置 200 条策略。一条策略由匹配规则、统计规则和处置规则三部分组成。

  • 匹配规则:定义需要进行频率统计的请求特征。
  • 统计规则:定义统计的维度、周期和阈值。
  • 处置规则:定义当请求频率达到阈值后 CDN 需要执行的动作。

本文将指导您如何通过控制台配置策略。
Image

策略执行逻辑

当一个请求同时满足多条频次控制策略的匹配规则时,系统会遵循以下逻辑执行:

  1. 独立统计:每条被匹配的策略都会根据自身的统计规则,独立地对请求进行计数。
  2. 阈值触发:当某条策略的请求计数值达到设定的阈值时,该策略中的处置规则会被触发。
  3. 处置执行
  • 如果一个请求触发了多条策略,系统会根据策略的优先级来决定最终执行哪一条策略的处置规则。优先级高的策略会优先生效。
  • 一旦某条策略被触发并执行了“拦截”类型的处置动作,其他策略将不再继续对请求进行计数。
  • 如果被触发的策略配置的处置动作是“观察”或“JavaScript 挑战”,其他策略会继续对请求进行计数。

策略管理

高级频次控制 标签页,您可以对已有策略执行编辑和删除操作。需要注意的是,编辑和删除操作会重置策略的运行状态。

删除策略
具体而言,策略删除后,请求计数会被清零,已应用的处置动作会被撤销。

编辑策略
编辑策略的底层逻辑是删除旧策略并创建一条新策略。因此,编辑操作会重置该策略的运行状态,并且新的策略配置立即生效,请求计数重新开始。

操作步骤

步骤一:创建策略

  1. 登录 火山引擎内容分发网络控制台
  2. 在左侧导航栏,点击 流量安全
  3. 流量安全 页面,点击 高级频次控制 标签页。
  4. 高级频次控制 标签页上,点击 新增
  5. 关联域名 列表中选择该策略需要关联的域名,然后设置策略的优先级。

Image

步骤二:添加匹配规则

匹配规则用于定义需要进行频率统计的请求所具备的特征。一个策略中最多可以添加 5 条匹配规则。当存在多条匹配规则时,规则之间的默认逻辑关系为 且(AND)。点击 添加匹配规则,然后根据以下说明设置规则:

匹配字段

说明

可指定的逻辑符

忽略大小写选项

文件全路径

表示请求 URL 中的路径。

等于、不等于

支持

文件目录

表示路径中的一个目录。

等于、不等于

支持

文件后缀

表示路径末尾的扩展名。

等于、不等于

支持

全路径正则

表示请求 URL 中的路径,通过正则表达式匹配。

匹配、不匹配

不支持

Query Name

表示请求 URL 中的某个查询参数。您需要指定查询参数的名称。

等于、不等于、为空、不为空、存在、不存在

支持

Query String

表示请求 URL 中的查询字符串,通过正则表达式匹配。查询字符串不包含开头的 ?

匹配、不匹配

不支持

请求方法

客户端发起请求时使用的 HTTP 方法。可选项包括 GETPOSTDELETEPUTHEADPATCHCONNECTOPTIONS

等于、不等于

不支持

User-Agent 头部

表示请求中 User-Agent 头部。

等于、不等于、为空、不为空、存在、不存在

支持

自定义请求头部

表示请求中的某个头部。您需要指定头部的名称。

等于、不等于、为空、不为空

支持

客户端 IP

表示客户端的 IP 地址。

等于、不等于

不支持

客户端 IP(优先匹配 XFF 头部)

表示客户端的 IP 地址。如果请求中存在 X-Forwarded-For,则优先使用该头部值中的第一个 IP 地址作为客户端 IP。

等于、不等于

不支持

JA3 指纹

表示 CDN 在 TLS 握手过程中,根据 ClientHello 报文中提取的特征生成的哈希值,用于识别非预期和恶意客户端(如爬虫、攻击工具)。参与指纹生成的特征包括:

  • SSLVersion:表示客户端在 ClientHello 消息中声明的 TLS 协议版本。
  • Cipher:表示客户端支持的加密套件列表。
  • SSLExtension:表示客户端在握手请求中携带的 TLS 扩展列表。
  • EllipticCurve:表示客户端支持的椭圆曲线类型列表。
  • EllipticCurvePointFormat:表示客户端支持的椭圆曲线点格式列表。

等于、不等于

不支持

步骤三:配置统计规则

统计规则定义了如何对满足匹配规则的请求进行计数。一个策略只能包含一条统计规则。请根据以下说明设置规则:

配置

说明

统计对象

表示统计的对象,有以下选项:

  • 客户端 IP:表示基于客户端的 IP 地址统计请求的数量。
  • 客户端 IP(优先匹配 XFF 头部):表示优先从 X-Forwarded-For 头部值中获取第一个 IP 地址进行统计。
  • 自定义请求头部:表示基于指定头部的值进行统计。
  • JA3 指纹:表示基于客户端的 JA3 指纹进行统计。

统计时长

表示统计请求数量的时间窗口。取值范围是 1 秒至 3600 秒。例如,统计时长设置为 60 秒,表示系统会以 60 秒为一个周期,持续统计周期内的请求数量。

统计阈值

表示在统计时长内允许的请求数量上限。当请求数量超过此阈值时,将触发处置规则。取值范围是 1 至 50000。

统计时段

表示策略生效的每日时间段。您可以指定一个具体的时间范围,例如 08:00 - 18:00。如果设置为 00:00 - 23:59,则表示全天生效。

步骤四:配置处置规则

处置规则定义了当请求数量达到阈值后,CDN 需要对后续的新请求执行的操作。请根据以下说明设置规则:

配置

说明

处置范围

表示 处置动作 的应用范围。可选的范围有:

  • 统计对象的全部请求:表示对统计对象达到阈值条件的新请求执行处置动作,无论请求是否满足匹配规则。
  • 统计对象满足匹配规则的请求:表示对统计对象达到阈值条件,并且满足匹配规则的新请求执行处置动作。

示例
假设策略的配置如下:

  • 匹配规则:文件全路径为 /test
  • 统计规则:统计对象为自定义请求头部 header,统计阈值为 100。
  • 处置动作:拦截。

在业务场景中,CDN 收到包含 header: value 头部的请求数达到 100。接着又收到两个包含 header: value 头部的新请求。请求1 的路径为/test,请求2 的路径为 /helloworld

在这个场景下:

  • 如果 处置范围统计对象的全部请求,则这两个请求都会被阻止。
  • 如果 处置范围统计对象满足匹配规则的请求,只有请求1 会被阻止。

处置动作

表示具体的处置操作。可选的操作有:

  • 观察:表示不执行任何拦截操作,仅记录相关事件。
  • 拦截:表示阻止新请求的访问。
  • JavaScript 挑战:表示向客户端返回一个包含 JavaScript 代码的重定向页面。客户端需要成功执行页面中的 JavaScript 代码才能通过验证并继续访问。此操作可以有效识别不具备 JavaScript 执行能力的客户端,例如自动化脚本或 DDoS 攻击工具。
  • 拦截统计窗口内剩余请求:仅在当前统计周期的剩余时间内阻止新请求。下一个统计周期开始时,请求计数将清零,请求的访问恢复正常。

说明

在以下场景中,不建议使用 JavaScript 挑战:

  • 非浏览器客户端:如果客户端是移动应用(App)或通过 API 调用资源,这些客户端通常无法执行 JavaScript 代码,会导致请求被误拦截。
  • 请求特定资源类型:如果客户端通过 Accept 头部明确要求非 HTML 类型的资源(例如 image/jpegapplication/json),JavaScript 挑战返回的 HTML 页面会导致类型不匹配,从而使挑战失败。

处置时长

表示 处置动作 的持续时间,取值范围是 1 秒至 86400 秒。处置时长结束后,请求计数将清零。

处置动作拦截统计窗口内剩余请求,该配置不会出现。

说明

建议 "处置时长" 大于或等于 "统计时长"。参见下方说明。

状态码

表示当 处置动作 为拦截时,CDN 向客户端返回的 HTTP 状态码。取值范围是 400 至 499。

响应页面

表示当 处置动作 为拦截时,CDN 向客户端返回的自定义响应页面的内容。

"处置时长"小于"统计时长"时的行为说明

当"处置时长"小于"统计时长"时,您需要了解其特殊的生效逻辑,以确保配置达到预期效果。

在一个统计周期内,当请求数量达到阈值后,处置动作会立即对满足条件的新请求生效。处置的实际结束时间将取"处置时长结束时刻"和"当前统计周期结束时刻"中的较晚者。

换言之:

  • 如果处置动作在统计周期结束前就到期,那么处置动作会延续到统计周期结束为止。
  • 如果处置动作的到期时间晚于统计周期的结束时间,那么处置动作会持续到处置时长结束为止。

示例说明

假设配置为:统计时长=1小时,处置时长=15分钟,处置动作=拦截。当前统计周期为 16:00-17:00。

  • 场景一:阈值在 16:03 达到。
    • 处置时长结束时刻为 16:18 (16:03 + 15分钟)。
    • 统计周期结束时刻为 17:00。
    • 实际拦截结束时间为 17:00,因为该时刻晚于 16:18。
  • 场景二:阈值在 16:53 达到。
    • 处置时长结束时刻为 17:08 (16:53 + 15分钟)。
    • 统计周期结束时刻为 17:00。
    • 实际拦截结束时间为 17:08,因为该时刻晚于 17:00。

附录:配置输入要求

匹配字段

输入要求

文件全路径

  • 每个路径都必须以 / 开头,不能包含空格,长度不超过 300 个字符。
  • 支持使用通配符 *,例如 /test/*.jpg
  • 最多输入 20 个路径,以回车分隔。

文件目录

  • 根目录表示为 /,其他目录必须以 / 开头和结尾,例如 /test/
  • 每个目录的长度不超过 300 个字符,不能包含空格。
  • 最多输入 20 个目录,以回车分隔。

文件后缀

  • 每个后缀只能包含字母和数字,长度不超过 50 个字符。例如 jpg
  • 最多输入 20 个后缀,以回车分隔。

全路径正则

  • 每个正则表达式的长度不能超过 300 个字符。
  • 最多输入 20 个正则表达式,以回车分隔。

Query Name

参数名称

  • 长度不超过 100 个字符。
  • 可以包含字母,数字,下划线(_),连字符(-),句点(.)。

参数值

  • 每个参数值的长度不超过 100 个字符,不能包含空格。
  • 最多输入 20 个参数值,以回车分隔。

Query String

  • 每个正则表达式的长度不超过 100 个字符。
  • 最多输入 20 个正则表达式,以回车分隔。

User-Agent 头部

  • 每个头部值的开头和结尾可以使用通配符 *,但头部值不能仅为 *,长度不超过 100 个字符。
  • 最多输入 20 个头部值,以回车分隔。

自定义请求头部

头部名称

  • 长度不超过 100 个字符。
  • 可以包含字母,数字,下划线(_),连字符(-),句点(.)。

头部值

  • 每个头部值的开头和结尾可以使用通配符 *,但头部值不能仅为 *,长度不超过 100 个字符。
  • 最多输入 20 个头部值,以回车分隔。

客户端 IP

  • 支持 IPv4、IPv6 或 CIDR 格式。
  • 最多输入 20 个 IP 地址,以回车分隔。

JA3 指纹

  • 每个 JA3 指纹的长度不超过 100 个字符。
  • 最多输入 20 个 JA3 指纹,以回车分隔。
最近更新时间:2026.01.21 17:14:18
这个页面对您有帮助吗?
有用
有用
无用
无用