高级频次控制是火山引擎内容分发网络(CDN)提供的一项安全功能,用于精准地管理和控制客户端的访问行为。通过配置频次控制策略,可以有效识别和拦截异常的高频请求,从而抵御盗刷、DDoS 攻击等恶意行为,保障业务的稳定运行。
要使用高级频次控制,请 提交工单。
每个域名支持配置 3 条策略,主账号下最多可以配置 200 条策略。一条策略由匹配规则、统计规则和处置规则三部分组成。
- 匹配规则:定义需要进行频率统计的请求特征。
- 统计规则:定义统计的维度、周期和阈值。
- 处置规则:定义当请求频率达到阈值后 CDN 需要执行的动作。
本文将指导您如何通过控制台配置策略。

策略执行逻辑
当一个请求同时满足多条频次控制策略的匹配规则时,系统会遵循以下逻辑执行:
- 独立统计:每条被匹配的策略都会根据自身的统计规则,独立地对请求进行计数。
- 阈值触发:当某条策略的请求计数值达到设定的阈值时,该策略中的处置规则会被触发。
- 处置执行:
- 如果一个请求触发了多条策略,系统会根据策略的优先级来决定最终执行哪一条策略的处置规则。优先级高的策略会优先生效。
- 一旦某条策略被触发并执行了“拦截”类型的处置动作,其他策略将不再继续对请求进行计数。
- 如果被触发的策略配置的处置动作是“观察”或“JavaScript 挑战”,其他策略会继续对请求进行计数。
操作步骤
步骤一:创建策略
- 登录 火山引擎内容分发网络控制台。
- 在左侧导航栏,点击 流量安全。
- 在 流量安全 页面,点击 高级频次控制 标签页。
- 在 高级频次控制 标签页上,点击 新增。
- 在 关联域名 列表中选择该策略需要关联的域名,然后设置策略的优先级。

步骤二:添加匹配规则
匹配规则用于定义需要进行频率统计的请求所具备的特征。一个策略中最多可以添加 5 条匹配规则。当存在多条匹配规则时,规则之间的默认逻辑关系为 且(AND)。点击 添加匹配规则,然后根据以下说明设置规则:
匹配字段 | 说明 | 可指定的逻辑符 | 忽略大小写选项 |
|---|
文件全路径 | 表示请求 URL 中的路径。 | 等于、不等于 | 支持 |
文件目录 | 表示路径中的一个目录。 | 等于、不等于 | 支持 |
文件后缀 | 表示路径末尾的扩展名。 | 等于、不等于 | 支持 |
全路径正则 | 表示请求 URL 中的路径,通过正则表达式匹配。 | 匹配、不匹配 | 不支持 |
Query Name | 表示请求 URL 中的某个查询参数。您需要指定查询参数的名称。 | 等于、不等于、为空、不为空、存在、不存在 | 支持 |
Query String | 表示请求 URL 中的查询字符串,通过正则表达式匹配。查询字符串不包含开头的 ?。 | 匹配、不匹配 | 不支持 |
请求方法 | 客户端发起请求时使用的 HTTP 方法。可选项包括 GET、POST、DELETE、PUT、HEAD、PATCH、CONNECT、OPTIONS。 | 等于、不等于 | 不支持 |
User-Agent 头部 | 表示请求中 User-Agent 头部。 | 等于、不等于、为空、不为空、存在、不存在 | 支持 |
自定义请求头部 | 表示请求中的某个头部。您需要指定头部的名称。 | 等于、不等于、为空、不为空 | 支持 |
客户端 IP | 表示客户端的 IP 地址。 | 等于、不等于 | 不支持 |
客户端 IP(优先匹配 XFF 头部) | 表示客户端的 IP 地址。如果请求中存在 X-Forwarded-For,则优先使用该头部值中的第一个 IP 地址作为客户端 IP。 | 等于、不等于 | 不支持 |
JA3 指纹 | 表示在 TLS 握手过程中 CDN 生成的客户端指纹信息。 | 等于、不等于 | 不支持 |
步骤三:配置统计规则
统计规则定义了如何对满足匹配规则的请求进行计数。一个策略只能包含一条统计规则。请根据以下说明设置规则:
配置 | 说明 |
|---|
统计对象 | 表示统计的对象,有以下选项: - 客户端 IP:表示基于客户端的 IP 地址统计请求的数量。
- 客户端 IP(优先匹配 XFF 头部):表示优先从
X-Forwarded-For 头部值中获取第一个 IP 地址进行统计。 - 自定义请求头部:表示基于指定头部的值进行统计。
- JA3 指纹:表示基于客户端的 JA3 指纹进行统计。
|
统计时长 | 表示统计请求数量的时间窗口。取值范围是 1 秒至 3600 秒。例如,统计时长设置为 60 秒,表示系统会以 60 秒为一个周期,持续统计周期内的请求数量。 |
统计阈值 | 表示在统计时长内允许的请求数量上限。当请求数量超过此阈值时,将触发处置规则。取值范围是 1 至 50000。 |
统计时段 | 表示策略生效的每日时间段。您可以指定一个具体的时间范围,例如 08:00 - 18:00。如果设置为 00:00 - 23:59,则表示全天生效。 |
统计指定状态码 | 表示只对特定响应状态码的请求进行计数。您可以输入具体的状态码,例如 404,或者使用 4xx、5xx 这样的范围表示。最多可以输入 50 个状态码,使用回车分隔。 |
步骤四:配置处置规则
处置规则定义了当请求数量达到阈值后,CDN 需要对后续的新请求执行的操作。请根据以下说明设置规则:
配置 | 说明 |
|---|
处置范围 | 表示 处置动作 的应用范围。可选的范围有: - 统计对象的全部请求:表示对统计对象达到阈值条件的新请求执行处置动作,无论请求是否满足匹配规则。
- 统计对象满足匹配规则的请求:表示对统计对象达到阈值条件,并且满足匹配规则的新请求执行处置动作。
示例
假设策略的配置如下: - 匹配规则:文件全路径为
/test。 - 统计规则:统计对象为自定义请求头部
header,统计阈值为 100。 - 处置动作:拦截。
在业务场景中,CDN 收到包含 header: value 头部的请求数达到 100。接着又收到两个包含 header: value 头部的新请求。请求1 的路径为/test,请求2 的路径为 /helloworld。
在这个场景下: - 如果 处置范围 为 统计对象的全部请求,则这两个请求都会被阻止。
- 如果 处置范围 为 统计对象满足匹配规则的请求,只有请求1 会被阻止。
|
处置动作 | 表示具体的处置操作。可选的操作有: - 观察:表示不执行任何拦截操作,仅记录相关事件。
- 拦截:表示阻止新请求的访问。
- JavaScript 挑战:表示向客户端返回一个包含 JavaScript 代码的重定向页面。客户端需要成功执行页面中的 JavaScript 代码才能通过验证并继续访问。此操作可以有效识别不具备 JavaScript 执行能力的客户端,例如自动化脚本或 DDoS 攻击工具。
- 拦截统计窗口内剩余请求:仅在当前统计周期的剩余时间内阻止新请求。下一个统计周期开始时,请求计数将清零,请求的访问恢复正常。
|
处置时长 | 表示 处置动作 的持续时间,取值范围是 1 秒至 86400 秒。处置时长结束后,请求计数将清零。
当 处置动作 为 拦截统计窗口内剩余请求,该配置不会出现。 |
状态码 | 表示当 处置动作 为拦截时,CDN 向客户端返回的 HTTP 状态码。取值范围是 400 至 499。 |
响应页面 | 表示当 处置动作 为拦截时,CDN 向客户端返回的自定义响应页面的内容。 |
JavaScript 挑战使用说明
在以下场景中,不建议使用 JavaScript 挑战:
- 非浏览器客户端:如果客户端是移动应用(App)或通过 API 调用资源,这些客户端通常无法执行 JavaScript 代码,会导致请求被误拦截。
- 请求特定资源类型:如果客户端通过
Accept 头部明确要求非 HTML 类型的资源(例如 image/jpeg 或 application/json),JavaScript 挑战返回的 HTML 页面会导致类型不匹配,从而使挑战失败。
附录:配置输入要求
匹配字段 | 输入要求 |
|---|
文件全路径 | - 每个路径都必须以 / 开头,不能包含空格,长度不超过 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 指纹,以回车分隔。
|