自定义Cachekey

配置自定义缓存键(Cachekey),开发者可以根据用户请求中的不同部分(例如查询字符串、HTTP请求标头或者Cookie等)制定规则来生成Cachekey,将访问同一个文件的一类请求转化为统一的Cachekey,避免将同一类请求缓存为不同文件的问题,从而提高缓存的命中率,降低回源率,减少请求的响应时间和带宽消耗。

背景信息

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

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

使用场景

场景一:统一Cachekey

客户的不同请求URL中含有复杂的参数,因此即使多个请求访问的是同一个文件,但由于URL参数不同,ESA节点会将这些不同的请求视为访问不同的文件,并缓存成多个文件,导致回源请求增加。

image

可通过自定义Cachekey功能设置忽略查询字符串,将同一类请求的Cachekey统一,降低回源率。

image

场景二:区分Cachekey

客户端请求的URL一样时,ESA将视为请求同一个文件。但实际上请求的Http Header中携带了client字段区分了客户端系统,希望请求不同文件。

image

此时可通过自定义Cachekey功能根据客户端类型来生成不同的Cachekey,两个请求即可识别为2个不同的Cachekey。

image

操作步骤

  1. 登录ESA控制台

  2. 在左侧导航栏,单击站点管理

  3. 站点管理页面,单击目标站点名称,或对应站点操作列的详情

  4. 在左侧导航栏,选择规则 > 缓存规则

  5. 单击新增规则,填写规则名称

  6. 当请求匹配以下规则时...区域设置要匹配的用户请求特征,具体配置规则请参见规则概述

  7. 绕过缓存区域,设置是否绕过缓存,具体请参见绕过缓存

  8. 自定义Cachekey区域,单击配置,设置以下参数。

    image

    参数

    说明

    对查询字符串排序

    选择是否开启对查询字符串排序功能,详情请参见查询字符串排序

    查询字符串

    设置去除请求URL中携带的?以及?之后的查询字符串,详情请参见查询字符串

    HTTP请求标头

    • 包括这些标头名称及其值:指定的HTTP请求标头名称及其值将会加入Cachekey。

    • 检查是否存在:检查指定的HTTP请求标头是否存在。如果存在,把HTTP Header名称加入Cachekey。

    Cookie

    • 包括这些Cookie名称及其值:指定的Cookie参数名称及其值将会加入Cachekey。

    • 检查是否存在:检查指定的Cookie参数是否存在:存在的话,把Cookie参数名称加入Cachekey。

    用户

    • 设备类型:根据客户端UA信息来识别客户端类型,然后根据客户端类型来生成Cachekey。客户端设备类型分为以下三种:

    • 国家/地区:根据客户端IP来识别客户端所在的国家/地区,然后根据国家/地区来生成Cachekey。

    • 语言:根据客户端请求中携带的Accept-Language信息来识别客户端语言,然后根据语言类型来生成Cachekey。

  9. 单击确定

配置示例

示例场景

  • 用户请求URL:http://www.example.com/image.jpg?key123=321&key456=654

  • 用户请求携带的header:

    • name123:321

    • name456:654

    • User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36

    • Accept-Language:zh-CN

  • 客户端使用中国电信的IP地址来访问。

功能配置

  • 查询字符串:删除参数key456

  • HTTP请求标头

    • 包括这些标头名称及其值:name123

    • 检查是否存在:name456

  • 用户

    • 设备类型国家/地区语言,三个开关都开启

image

生成Cachekey

每个参数生成的Cachekey片段为:

  • http://www.example.com/image.jpg?key123=321

  • name123:321

  • name456

  • desktop

  • CN

  • Accept-Language:zh-CN

所以,实际拼接生成的Cachekey为:http://example.com/image.jpg?key123=321name123:321name456desktopCNAccept-Language:zh-CN