通过自定义Cachekey,可以将访问同一个文件的一类请求转化为统一的Cachekey,避免不同请求缓存为不同文件的问题,降低回源率。本文为您详细介绍配置自定义Cachekey功能的操作步骤。

功能介绍

Cachekey是一个文件在CDN节点上缓存时唯一的身份ID,每个在CDN节点上缓存的文件都对应一个Cachekey。文件的Cachekey默认为客户端请求的URL(带参数)。

场景一:

客户的不同请求的URL中含有复杂的参数,因此即使多个请求访问的是同一个文件,但由于URL参数不同,CDN节点会视为请求不同文件而将不同请求缓存成多个文件,造成回源的请求增加。 图一
可通过自定义Cachekey规则将同一类请求的Cachekey统一,降低回源率。 图二

场景二:

客户端请求的URL一样时,CDN将视为请求同一个文件。但实际上请求的Http Header中携带了client字段区分了客户端系统,希望请求不同文件。 场景一
此时可通过自定义Cachekey将client字段的值拼接至Cachekey,两个请求即可识别为2个不同的Cachekey。 场景二

操作步骤

  1. 登录CDN控制台
  2. 域名管理页面,单击目标域名对应的管理
  3. 在指定域名的左侧导航栏,单击缓存配置
  4. 自定义Cachekey页签配置Cachekey。
    说明 支持对URI、参数操作、HTTP HEADER进行修改,同时支持自定义变量,从请求中提取需要的字段。最终的Cachekey将由URI、参数操作、HTTP HEADER、自定义变量四部分组合而成。
    自定义Cachekey
  5. 单击确定

示例

URI

客户端的请求 http://yourdomain.com/a/b/test.jpghttp://yourdomain.com/a/b/c/test.jpg 将视为请求同一个文件,该文件的Cachekey为 http://yourdomain.com/c/test.jpgURI

参数操作

客户端的请求 http://yourdomain.com/a/b/test.jpg?delete_par=1&modify_par=1 将按规则添加 add_par=1,删除 delete_par,将 modify_par的值修改为 2,最终转化为 http://yourdomain.com/a/b/test.jpg?modify_par=2&add_par=1
注意 参数操作中,如对同一个变量同时进行了多个操作,则各种操作的生效优先级:新增>删除>仅保留>修改。
参数操作

HTTP Header

客户端请求的HTTP HEADER的 User-AgentAccept-Language的值将被拼接到Cachekey中。例如请求 http://yourdomain.com/a/b/test.jpg中的 User-Agent=Mozilla/5.0 (Linux; X11)Accept-Language=en,则该请求的Cachekey为: http://yourdomain.com/a/b/test.jpgMozilla/5.0(Linux;X11)enHTTP Header

自定义变量

示例一

变量名为 language,来源为 Request Header,来源字段名为 Accept-Language,匹配规则为 ([%w]+),([%w]+),变量表达式为 $1aa自定义变量
客户端的请求 http://yourdomain.com/a/b/test.jpg且携带HTTP请求头 Accept-Language=en,ch ,则匹配规则将匹配到 en赋值给变量表达式中的 $1。变量表达式还将在末尾拼接上 aa,得到 enaa的变量并取别名为 language,拼接在URL后方形成最终的cachekey: http://yourdomain.com/a/b/test.jpgenaa
说明 变量表达式中的 $n的含义是匹配规则中第 n个括号所匹配到的内容。例如示例一中 Accept-Language=en,ch,匹配规则为 ([%w]+),([%w]+),则 $1=en$2=ch

示例二

变量名为 expired,来源为 Request Cooike,来源字段名为 a,匹配规则为 [%w]+:(.*),变量表达式为 $1自定义变量

客户端的请求http://yourdomain.com/a/b/test.jpg且携带Cookie a=expired_time:12635187,则匹配规则将匹配到12635187赋值给变量表达式中的$1并取别名为expired,拼接在URL后方形成最终的cachekey:http://yourdomain.com/a/b/test.jpg12635187

示例三

同时设置URI规则和自定义变量。

URI:

将所有URI符合 /abc/.*/abc的请求都合并成 /abc示例三

自定义变量:

变量名为 testname,来源为 Path,匹配规则为 /abc/xyz/(.*),变量表达式为 $1示例三

客户端的请求URLhttp://yourdomain.com/abc/xyz/abc/test.jpg,按URI的配置Cachekey将被合并成http://yourdomain.com/abc/test.jpg, 然后根据自定义变量的配置该URL将会命中/abc/xyz/(.*),此时$1将被赋值为abc并拼接到Cachekey中,形成最终的cachekey:http://yourdomain.com/abc/test.jpgabc,从而达到两个规则组合使用,实现更复杂的缓存逻辑。

注意 自定义Cachekey功能不会修改回源的URL,仅会修改请求的缓存标识,回源的请求和客户端发起的请求内容保持一致。