令牌校验影响CDN缓存的解决方案

更新时间:
复制为 MD 格式

背景信息

如果您已经接入DCDN并配置了缓存规则,同时启用了WAF令牌校验,但是WAF在令牌校验时会在URL中随机插入参数,导致请求未能命中DCDN缓存规则,直接访问后端源站。这会增加源站的负载和压力,导致性能下降、响应时间延长,并增加潜在的安全风险。为了解决这一问题,您可以通过自定义CacheKey忽略这些参数,从而继续利用DCDN缓存,降低回源率。

前提条件

方案概览

本文以使用DCDN为例,配置自定义CacheKey只需2步:

  1. 配置自定义CacheKey:忽略URL中的被插入的随机参数,从而提高缓存的命中率,降低回源率,减少请求的响应时间和带宽消耗。

  2. 测试验证:对配置进行全面测试,确保缓存策略、WAF令牌校验和自定义CacheKey配置正确无误并正常运行。

说明

如果您使用的是阿里云CDN,则其配置方法相同。

架构图

image

步骤一:配置自定义CacheKey

1. 获取令牌参数名

在配置自定义 CacheKey 之前,您需要通过浏览器访问目标网站触发令牌校验以获取相关的参数名。

https://xxx/xxxdc.html?md5__1524=eqRxuD9iDtKCqAKD%3DD%2FD0i5twcbDRiYPx6moD
说明

令牌校验插入的参数名称针对不同域名是随机生成的,但某个域名下所有请求插入的令牌参数名是固定的,其格式为XXX__随机数字,其中XXX可以是下面任意一个单词。

timestamp、md5、type、ipcity、decode、encode、time、refer。

2. 配置自定义CacheKey

  1. 登录DCDN控制台,在左侧导航栏,单击域名管理后,单击目标域名操作列的配置

  2. 在指定域名的左侧导航栏,单击缓存配置,选择自定义CacheKey页签,单击配置

    说明

    支持对URI、请求参数、HTTP HEADER进行修改,同时支持自定义变量,从请求中提取需要的字段。最终的Cachekey将由URI、请求参数、HTTP HEADER、自定义变量四部分组合而成。

  3. 自定义Cachekey对话框中,参数操作选择删除,并输入获取的令牌参数名。其他配置详情,请参见自定义Cachekey参数说明

步骤二:测试验证

对配置进行全面测试,确保缓存策略、WAF令牌校验和自定义CacheKey配置正确无误并正常运行。

浏览器打开开发者工具访问网站,单击Network,查看Response Headers信息。如果存在X-Cache头且值包含HIT关键字,则表明配置生效命中缓存数据。

说明

X-Cache表示是否命中缓存,MISS表示不命中,HIT表示命中。

Response Headers
Accept-Ranges:              bytes
Age:                        7
Ali-Swift-Global-Savetime:  1730188630
Connection:                 keep-alive
Content-Length:             14
Content-Type:               text/html; charset=UTF-8
Date:                       Tue, 29 Oct 2024 07:57:10 GMT
Eagleid:                    7521a19d17301886372938421e
Etag:                       "e-625470f0c1bb7"
Last-Modified:              Fri, 25 Oct 2024 06:16:25 GMT
Server:                     Tengine
Timing-Allow-Origin:        *
Via:                        cache19.l2cn3137[58,57,200-0,M], cache11.l2cn3137[60,0], kunlun4.cn7737[0,0,200-0,H], kunlun9.cn7737[1,0]
X-Cache:                    HIT TCP_MEM_HIT dirn:-2:-2
X-Swift-Cachetime:          86400
X-Swift-Savetime:           Tue, 29 Oct 2024 07:57:10 GMT