规则引擎提供了强大的灵活配置能力,以下是常见的应用场景及配置示例:
根据客户端请求的特征(如请求头、客户端 IP、请求 URL、客户端所在地区等),制定黑白名单策略,并指定 CDN 的响应状态码。
配置示例:
/test/(忽略大小写)myParam - 存在http://www.example.com/(忽略大小写)198.51.100.25.*test.*(忽略大小写)403
根据客户端请求的特征(如请求头、请求 URL、客户端所在地区等)设置不同的缓存时间。
配置示例:
/test/(忽略大小写)myParam - 存在http://www.example.com/(忽略大小写)198.51.100.25.*test.*(忽略大小写)CDN缓存,强制缓存 false,缓存时间 30 秒,Set-Cookie不缓存 false
您还可以实现特定的缓存需求,例如让 CDN 对 OPTIONS 请求直接响应 200 状态码。
配置示例:
OPTIONS200
根据客户端请求的特征(如请求 URL 中的参数、客户端所在地区等)对请求进行限速。
配置示例:
myParam - 存在300 B/s,不限速部分 10 KB
您可以实现复杂的跨域资源共享(CORS)策略。例如,除了标准的 HTTP/HTTPS 请求外,您还可以还允许来自微信小程序的跨域请求,并根据请求中的 Origin 头部动态设置 Access-Control-Allow-Origin 响应头。
配置示例:
删除,响应头名称 Access-Control-Allow-Origin^weapp://www.example.com、^http://img.example.com.com(忽略大小写)设置,响应头名称 Access-Control-Allow-Origin,响应头值 ${http_origin}
您可以自定义浏览器下载时显示的文件名,并防止文件在下载过程中被劫持。
要实现此目的,您可以通过名为 filename 的查询参数、请求头或 Cookie 来传递文件的真实名称,然后将 Content-Disposition 响应头设置为 attachment;filename="${arg_filename}";filename*=utf-8''${arg_filename}。
配置示例:
filename - 存在设置,响应头名称 Content-Disposition,响应头值 attachment;filename="${arg_filename}";filename*=utf-8''${arg_filename}说明
filename*=utf-8''${arg_filename} 格式遵循 RFC 5987 规范。filename="${arg_filename}"; 用于兼容某些旧版浏览器不支持 RFC 5987 的情况。需要留意的是,对于这些旧版浏览器,下载文件的名称可能会显示为乱码。为了提升源站的安全性,防止攻击者通过探测响应头获取源站的内部架构信息,您可能需要在未命中缓存时,过滤掉源站返回的特定头部。
由于规则引擎能够识别 CDN 系统默认生成的缓存标识 X-Response-Cache,您可以配置在判断为未命中缓存(即 miss)时,删除诸如 Server: nginx/1.18.0 或 X-Powered-By: PHP/7.4 等暴露后端技术栈的敏感头部。
X-Response-Cache - 等于 - miss(忽略大小写)删除,响应头名称 Server删除,响应头名称 X-Powered-By为了统一公司内部的日志和排障规范,您可能希望隐藏 CDN 默认的冗长头部 X-Response-Cache,改为自定义一个专门指示缓存命中状态的响应头(如 X-Cache: HIT),并同时记录该请求在 CDN 边缘节点的响应耗时,以便客户端或前端监控 SDK 进行性能数据采集。
您可以通过判断 X-Response-Cache 的取值来实现这一系列响应头控制逻辑。
X-Response-Cache - 等于 - edge_hit(忽略大小写)删除,响应头名称 X-Response-Cache设置,响应头名称 X-Cache,响应头值 HIT设置,响应头名称 X-Edge-Response-Time,响应头值 ${response_time}ms当客户端请求由于访问控制配置拦截或限速等原因受阻时,CDN 会在 HTTP 响应中默认新增 X-Exception-Info 响应头来指示异常原因。各异常类型对应的具体响应信息,请参见下方的 X-Exception-Info 常见响应信息列表。
通过规则引擎识别这些特定的响应头,您可以配合 HTTP 状态码改写 或 自定义页面 动作,对拦截行为进行友好的定制处理。常见场景包括:
场景 1:请求被限速时,转到自定义页面 当触发下载限速规则时,您可以通过识别响应头 X-Exception-Info: rate limit by download speed limit,并使用“自定义页面”动作将请求重定向到指定的提示页面(例如:https://www.example.com/rate-limit.html)。
配置示例:
X-Exception-Info - 等于 - rate limit by download speed limit(忽略大小写)自定义重定向页面,状态码 303,Location https://www.example.com/rate-limit.html场景 2:请求被 IP 黑名单拦截时,自定义状态码 当请求触发 IP 黑名单被拦截时,CDN 默认会返回特定的状态码。您可以通过识别响应头 X-Exception-Info: deny by ip access rule,并使用“HTTP 状态码改写”动作,将其修改为您业务期望的状态码(例如:404 或 450)。
配置示例:
X-Exception-Info - 等于 - deny by ip access rule(忽略大小写)450参考:X-Exception-Info 常见响应信息列表
异常类型 |
|
|---|---|
地域访问控制 | deny by area access rule |
禁用 HTTP Method | deny by method rule |
IP 黑白名单 | deny by ip access rule |
Referer 黑白名单 | deny by referer access rule |
UA 黑白名单 | deny by ua access rule |
Origin 黑白名单 | deny by origin access rule |
自定义头部黑白名单 | deny by customiza access rule |
自定义拦截规则 | deny by request block rule |
URL 鉴权 | deny by url auth |
远程鉴权 | deny by remote url auth |
下载限速 | rate limit by download speed limit |
下载限速(规则引擎) | rate limit by rule engine |
拒绝访问(规则引擎) | deny by rule engine |
流量检测-限速 | rate limit by flow detection |
流量检测-拦截 | deny by flow detection |
流量检测(高危 IP 情报库) | deny by flow detection (high risk IP) |