阿里云CDN从域名添加到缓存设置优化全图文教程

不少在看了搬主题介绍的阿里云轻量云服务器【阿里云香港轻量云服务器性能网络2022最新评测】后,都进行了尝试,效果都还可以,但是对于一些优化操作步骤就犯难了,比如如果设置CDN优化加速,这里搬主题就分享一下阿里云官方的教程,从域名添加到缓存优化设置加速的图文教程。

阿里云CDN活动地址:https://www.aliyun.com/product/cdn

准备工作

  1. 开通CDN服务,您需要注册阿里云账号并完成账号实名认证,登录阿里云CDN平台后选择立即开通产品。
  2. 已有可在公网上通过HTTP(s)协议访问的源站(OSS/ECS等)。

配置接入

配置CDN过程有三大必要配置:基础信息、业务信息、源站信息,我们将会把配置过程分为两大部分。

基础信息及业务信息配置

为了帮助您更好的理解CDN配置项的功能和含义,在正式配置前,我们建议您跟随小问卷的形式对您的现有业务形态进行分析,使得最终配置能够贴近您的业务场景:

  1. 您希望在CDN加速前后,资源的访问域名是否发生变化?
  1. 变化,CDN加速后用另一个域名访问。(创建域名后需关注文章「其他常用配置」中的回源HOST功能)
  2. 不变,原有域名业务全部迁移到CDN上。
  1. 您希望加速的业务场景是什么样的?
  1. 多种资源共存的门户网站、企业官网、个人博客等
  2. 点播视频播放
  3. 安装包/大文件下载
  1. 您的源站内容是动静态业务独立部署的吗?(动态请求例如进行登录、评论、提交订单等操作,静态请求例如获取图片、视频、文档等操作)
  1. 是的,动静态请求使用了不同站点域名接入
  2. 不是,动静态请求使用了相同站点域名接入

小提示:选择B时,推荐加速场景使用全站加速DCDN。

  1. 您的域名是否已经进行工信部备案?
  1. 是的,已完成工信部备案。
  2. 不是,尚未备案 或 源站在海外无法备案。

小提示:未备案域名无法为中国内地用户提供CDN加速服务,后续配置时加速区域只能选择全球(不包含中国内地)。

  1. 您希望享受加速效果的用户主要分布在哪里?
  1. 中国内地,只需要对这部分用户保障加速效果即可,不需要海外加速节点。
  2. 全球(不包含中国内地),只需要对中国内地以外的用户保障加速效果即可。
  3. 全球,用户在各地均有分布。

在完成第一阶段的小问卷后,您可以带着对上述小问卷中的匹配结果来完成CDN控制台添加域名页面的各个配置项,我们将为您继续解读其含义和建议配置值,您可以根据自身情况完成下列配置 。

  • 加速域名:如果您希望CDN加速前后访问域名不变,加速域名中填写您需要加速的业务域名(例如 video.aliyun.com)即可。如果加速时需要使用其他域名,您也可以自行定义域名添加(例如cdn.aliyun.com)
  • 业务类型:选择和您业务匹配度最高的一项即可。
  • 如果您的业务中动静态业务未分离部署,推荐使用全站加速。
  • 不同配置项在各个场景上有一定优化,但CDN并不限制加速文件类型。如果您的域名中含多类型文件类型时,选择最贴近的即可。
  • 加速区域:选择需要使用的CDN加速节点覆盖范围。
  • 选择仅中国内地或全球时,您的加速域名需要在工信部完成备案。
  • 加速区域仅影响您的加速节点覆盖范围,区域无加速节点覆盖时,将会解析到加速区域内的节点。例如域名加速节点不含中国内地时,中国内地用户访问默认将通过海外节点进行接入。
  • 资源分组:选择默认分组即可。如果您需要根据业务部门、项目等维度进行云资源的分组管理,您也可以通过创建资源组来实现。

另外,为了确保域名只被真正的拥有者添加,首次在CDN控制台添加一个新域名时,需要完成域名归属权验证,验证通过后您再次添加该域名或子域名时,无需再次验证。如果之前已经验证通过根域名的归属权,请忽略。

源站信息配置

在完成基础信息和业务信息的填写后,进入到的源站信息配置。源站信息将决定CDN首次访问资源时,如何回源以及回到哪里去获取资源,配置错误可能会导致您的域名出现无法访问到的情况,因此我们仍然建议先对您的业务特征进行分析:

  1. 您需要加速的源站是云存储吗?
  1. 是的,OSS存储。(问卷结束,无需完成后续作答,如为私有OSS空间,创建域名后需关注文章「其他常用配置」中 阿里云OSS私有Bucket回源 功能)
  2. 是的,其他厂商的云存储服务。(问卷结束,无需完成后续作答,创建域名后需关注文章「其他常用配置」中 回源HOST 功能)
  3. 不是。
  1. 您需要加速的源站是阿里云-函数计算吗?
  1. 是的。(问卷结束,无需完成后续作答)
  2. 不是,是ECS/其他云厂商的云服务器/物理服务器等
  1. 您希望CDN直接回源您的源站吗?
  1. 是的,CDN直接回源服务器即可
  2. 不是,需要通过WAF等云服务接入、转发
  1. 您希望CDN从您源站获取资源时,使用http协议还是https协议呢?
  1. 都可以,不限制。
  2. 全部用https协议,安全性更高。(创建域名后需关注文章「其他常用配置」中 回源SNI 功能)
  1. 您的源站http访问时,会强制跳转为https协议吗?
  1. 是的,会通过3xx重定向跳转为https协议访问。
  2. 没有该策略。

小提示:选择A时,后续配置时使用https协议回源

  1. 您源站的web服务部署的是默认端口吗?
  1. 是的,部署在80/443端口。
  2. 不是,web服务部署在特殊端口上。

小提示:选择B时,后续配置需要注意回源端口和回源协议的配置。

  1. 您希望多站点回源,还是单站点回源即可?
  1. 单站点回源,我只有一个源站。
  2. 多站点回源,需要主备/轮询回源。

小提示:多站点时,需要添加多源站,并配置优先级、权重。

  • 源站信息:
  • 如果您的源站是OSS或函数计算,您可以选择并填写OSS源站域名(列表搜索存储空间名/选择自定义域名)或函数计算域名
  • 如果您的源站是动态IP接入,例如是其他厂商的云存储服务或WAF等需要通过域名回源的场景,您可以选择并填写源站域名。
  • 如果您的源站是ECS或其他厂商的云服务器,优先推荐使用IP源站回源。
  • 优先级:
  • 单个源站时无需修改。
  • 该功能支持在多源站场景时进行主备回源,仅在主源站故障时切换,因内容不存在出现404时不会轮询,因此建议保持多源站之间内容一致性。
  • 权重:
  • 单个源站时无需修改。
  • 该功能支持在多源站场景时根据权重分配回源比例,数值越大,源站分配到的用户请求比例越高。您可以根据业务需求,自行设置权限值,同时建议保持多源站之间内容一致性。
  • 端口:
  • 源站未部署在特殊端口:填写80(HTTP协议回源)或443(HTTPS协议回源)即可,如果业务对回源内容安全性有要求,或者您的源站配置了在收到HTTP请求时自动重定向到HTTPS功能,回源建议使用443端口。
  • 源站部署在特殊端口:填写服务部署的对应端口即可,默认使用HTTP协议回源。如果需要HTTPS协议回源特殊端口,您可以提交工单申请后台配置。

其他常用配置

完成上述三大配置项之后,您可以进行创建域名,除了上述常见配置外,还有几项回源相关的配置项需要关注,您可以在域名创建后,根据业务需求在域名管理-配置-回源配置中修改:

  • 回源HOST:访问源站时,指定HTTP请求中携带的HOST头部,决定了访问源站服务器上的哪一个站点。默认情况下,回源HOST将与您的加速域名保持一致。
  • 回源阿里云OSS时,会自动添加回源HOST为存储域名,如果您为其他云厂商的OSS服务加速,需要手动配置回源HOST为对应的源站域名。
  • 回源WAF时,无需配置此项,CDN和WA共同使用时一般为CNAME接入模式,访问HOST使用默认的加速域名即可。
  • CDN加速域名和源站配置的ServerName不同时,需要手动配置回源HOST为源站内容对应的ServerName。

  • 回源SNI:回源使用了443端口(HTTPS协议回源),且源站部署了多个安全站点,建议手动配置回源SNI和回源HOST保持一致(手动配置为加速域名 或 自定义的ServerName)。
  • 阿里云OSS私有Bucket回源:当您的源站为阿里云OSS私有存储空间时,默认每次回源请求需要携带鉴权参数,开启该配置后,CDN回源OSS时会自动签算鉴权凭证。
  • 开启该功能后,通过CDN访问OSS资源时,默认无需携带鉴权参数即可访问,如有安全防护需求,推荐您可以通过CDN上的其他安全策略进行访问控制。
  • 访问URL的query中含有OSS鉴权参数时,会导致同资源的参数值不相同,默认无法共享同一资源的缓存并利用其加速,因此,推荐您通过CDN的鉴权控制进行安全管控,请求时仅携带CDN鉴权参数即可。

至此,CDN域名的创建和源站配置就已经基本完成,配置完成后,域名尚未真正接入CDN服务,我们仍需要将域名解析到特定的CNAME记录上,才能使得请求时通过CDN的调度系统访问到周边加速节点。

阿里云CDN活动地址:https://www.aliyun.com/product/cdn

使用CDN加速静态资源时,CDN会将源站上的资源缓存到距离客户端最近的CDN节点上。当您访问该静态资源时,可直接从CDN的缓存节点上获取,有效避免通过较长的链路回源,提高资源访问效率。在本章节中,我们共同学习如何通过合理配置CDN缓存功能来提升业务缓存的利用率,实现终端用户访问体验的提升。

CDN配置优化准备工作

1.已经添加完成的CDN域名

2.阿里云CDN控制台。

CDN缓存配置及工作机制

在正式开始配置之前,我们需要先了解缓存的形式和原理机制。

默认Cachekey

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

即 默认情况下,缓存内容的索引名(Cachekey)受到 域名、路径、参数 三大因素共同影响。我们可以理解为,对于同一个边缘节点,请求信息中三者完全一致的情况下将使用同一份缓存内容,三者中有任一因素变化则无法使用同一份缓存。

当我们的访问链接中路径变更或参数变更时,均会生成独立缓存。

为了提升缓存效率,我们需要对业务思考以下四个问题:

1.业务访问时,访问URL中是否携带参数(可以分析源站nginx访问日志或业务代码的实现逻辑),这些参数的作用是什么,携带参数不同是否会影响文件响应的内容(或 参数是否会影响源站处理行为)?

如果您的URL中携带变化的参数,默认会影响缓存命中率和加速效果,推荐关注下文「缓存优化-忽略参数缓存」部分内容。

2.业务文件内容更新时,文件的路径(目录/文件名)是否会发生变化?

如果您的文件内容以同名文件覆盖的形式进行更新,推荐关注【缓存时间配置】中的配置引导,针对内容频繁更新的资源降低缓存时间。

3.您的业务中大文件缓存(平均大于20M)是否较多?

如果您的业务中大文件较多,提升缓存及回源效率推荐开启range分片功能,推荐关注下文「缓存优化-range回源」部分内容。

4.您的业务中是否需求针对完全相同的访问URL区分不同的缓存?

即同一个uri对应的资源有多个版本,例如同一个页面的不同压缩格式,一个图片的不同尺寸(甚至也可能是完全不同的内容),服务端通过收到的请求的uri以及一些决定版本的头部信息来确定应该给客户端返回哪个版本,推荐关注下文「缓存优化-多副本及自定义缓存」

访问URL的格式和场景和缓存利用效率息息相关,在下文的内容中,我们可以通过忽略参数缓存、cachekey改写等功能,对域名的缓存索引方式进行调整,以适配您的业务场景。

小提示:在CDN使用场景中,推荐您的源站更新资源时,考虑以不同的文件名作为新旧版本区分,例如img-v1.0.jpg、img-v2.1.jpg的方式命名,以实现便捷区分新旧缓存的效果。

缓存更新机制

CDN缓存更新主要有两种方式:

1.超出缓存的过期时间

当CDN节点上的缓存失效后,缓存不会立即被清理,在源站返回last-modified/etag头部情况下,CDN将会回源发起缓存有效性校验(即协商缓存)。

可以通俗地理解为,CDN将之前缓存文件的标识信息带回源站询问是否发生变化。

  • 如源站内容未发生变化,源站将返回304状态码,CDN节点仅更新缓存的有效周期,不变更缓存内容,截止下次缓存时间到期前不会再次回源;
  • 如源站内容发生变化,源站将返回200状态码和更新后的内容,CDN节点将更新缓存的有效周期并覆盖缓存内容,实现文件更新的效果。

2.主动更新

当CDN节点上的缓存未失效,但源站内容已经发生变化,业务上需要立即更新CDN上资源的缓存时,需要使用CDN的缓存刷新功能,您需要通过 CDN控制台-刷新预热 或者 API接口 下发缓存的刷新任务,详细操作和说明将在下章节为您介绍。

缓存时间配置

在缓存管理中,可以方便地指定目录和文件后缀名在CDN节点上的缓存时间,缓存时长配置的长短,取决于源站对该文件的变更频率。我们需要分析下业务中以下几个问题:

1.您的域名下有哪些类型的资源内容?

例如,该加速域名下有html/js/css/mp4/apk等文件类型的内容。

2.您源站这些不同目录、不同类型的资源内容在什么情况下内容会变化,变化的频率如何?

例如,mp4文件的内容一般不会变化,而html是新闻门户的主页,其展示页面中的文本内容平均1小时更新一次。

3.您源站这些文件在变化时,文件名是否也会跟随变化?

例如,文件在更新内容时都会使用新的文件名,或 文件更新后仍然使用之前的文件名。

小提示:在下文的内容中,我们将根据此处的分析结果进行缓存时间的配置。

CDN缓存时间主要受两个部分控制:

1.源站返回的标准HTTP缓存控制头部(cache-control)。

2.您在控制台上配置的缓存时间。

配置缓存时,我们需要登录CDN控制台。在域名管理中单击目标域名,选择缓存配置。

在缓存过期时间页签下,单击添加即可配置缓存规则。

  • 目录为某一路径下所有资源设置相同缓存规则;文件后缀名:为某一文件类型资源的设置相同缓存规则。
  • 权重即缓存规则的优先级。取值为1~99,数值越大优先级越高,对应规则优先生效。
类型 项目 地址/后缀名取值
对域名下所有文件配置默认缓存时间 目录 /
对域名下/video目录配置缓存时间 目录 /video
对/home/index.html特定文件设置缓存 目录 /home/index.html
对域名下js,css类型文件配置缓存时间 文件后缀名 js,css

结合上文中的业务分析,推荐您根据业务情况在CDN域名上配置缓存时间。

如果没有明确业务更新周期,可缓存资源推荐配置一个月以上的缓存时间,如果源站的资源发生变更,您可以通过CDN的刷新缓存功能清理节点上的缓存(下章节中会详细说明)。

需要注意的是,如您的业务中有动态请求(如表单提交/登录/评论/上传等交互),需要设置对应路径或文件类型的缓存时间为0。如果您需要对动态请求也进行加速,优先推荐您使用全站加速(DCDN)产品。

补充说明:参考CDN产品文档,CDN节点上的缓存生效优先级如下

1.源站响应pragma:no-cache、cache-control:no-cache(或者no-store,或者max-age=0)时,不缓存。

2.CDN控制台设置的缓存过期时间或者状态码过期时间。

3.源站配置其他缓存规则,优先级由高至低为:cache-control>expires>last-modified>etag。

4.源站返回的数据中ETag、last-modified、cache-control和expires这些缓存相关的响应头都没有携带,则默认不缓存。

缓存命中判断

正确配置缓存后,您可以通过访问资源URL时,通过CDN响应头中的X-Cache信息判断是否命中缓存,首次访问时可能会显示MISS,可以通过刷新页面或重试请求检查下次请求是否命中。

下图为通过chrome开发者工具抓包的结果,您也可以通过curl进行测试。

X-cache:HIT(命中)/MISS(未命中),此处仅代表边缘节点的命中情况,不代表其父层节点的命中情况。

X-Swift-SaveTime:缓存在节点上保存的时间,零时区(北京时间+8H)。

缓存优化

缓存优化部分致力于帮助您的业务缓存得到合理的利用,此处主要介绍三个常用功能。

  • 忽略参数缓存(常用)

CDN缓存时忽略全部或部分URL中的参数内容,提高缓存利用率,针对URL中携带随机变化参数但不影响缓存内容的场景,推荐开启。

  • range请求(常用)

针对业务中平均文件大小超过20M,在源站允许range的情况下,开启该功能允许CDN分片进行回源,不仅能够降低回源带宽,也可以提升缓存效率,大文件场景下推荐开启。

  • 多副本及自定义缓存(特殊场景使用)

业务中仅用URL无法完全区分响应内容,需要结合请求中其他信息,对同URL进行多个副本的缓存,或者需要自定义缓存逻辑。

阿里云CDN活动地址:https://www.aliyun.com/product/cdn

忽略参数缓存(常用)

上文中我们提到过,如果您的业务URL中携带变化的参数,默认会影响缓存命中率和加速效果,这些不同的参数无法复用同一份缓存的内容。

如下图所示,尽管四个访问URL的内容都是同域名下的test.jpg,响应的资源内容也完全一致,但由于携带的参数不同,导致对应的缓存索引也不同,最终无法使用同一份缓存内容,分别独立回源,如何改善这种情况呢?

针对time这种对业务内容和逻辑无影响的参数,我们希望上面两种访问URL使用同一份缓存内容,那么需要保证他们的缓存索引一致,实现如下图的效果,也就是在生成CDN缓存索引时,忽略 time 参数。

配置方式:

1.CDN控制台-域名管理-管理-性能优化中的忽略参数,配置入口如下图所示。

2.点击修改配置后,配置页面如图,我们列举了几种常见场景方便您的理解,可以参考场景示例进行配置。

场景 过滤模式 过滤参数 过滤参数 保留回源参数
CDN忽略所有参数缓存,但回源站时需要携带参数,例如源站有鉴权。 保留指定参数 不填写
CDN忽略所有参数缓存,也无需携带参数回源。 保留指定参数 不填写
CDN保留version参数缓存,且只携带version参数回源。 保留指定参数 version
CDN仅保留key1和key2参数缓存,但需要携带所有参数回源。 保留指定参数 key1,key2

场景 过滤模式 删除指定参数 保留回源参数
仅删除timestamp参数缓存,保留其他参数缓存,回源无需携带timestamp 删除指定参数 timestamp
仅删除token参数缓存,保留其他参数缓存,回源时必须携带token 删除指定参数 token

小提示:如果基础的忽略参数缓存无法满足您对缓存索引的需求,也可以了解缓存配置中的 自定义Cachekey 功能。

range回源(常用)

Range回源,指CDN节点在回源的HTTP请求里面携带了Range信息,源站在收到CDN节点的回源请求时,根据HTTP请求头中的Range信息返回指定范围的内容数据给CDN节点。Range回源可有效提高文件分发效率,可以提高缓存命中率,减少回源流量消耗和源站压力,并且提升资源响应速度。

需要特别注意:

1.开启Range回源前需确认源站是否支持Range请求,即HTTP请求头中包含Range字段,并且源站能够响应正确的206文件分片。如果源站不支持Range请求,开启Range回源将导致资源无法缓存。

2.如果源站是OSS(默认支持range),开启range功能后,推荐您额外在CDN控制台配置 增加回源HTTP请求头 x-oss-range-behavior:standard  ,可兼容HTTP Range范围超出有效区间时OSS的行为。

配置方式:

1.CDN控制台-域名管理-管理-视频相关中的range回源,配置入口如下图所示。

2.选择开启强制Range回源

小提示:开启和强制的区别在于

  • 开启:仅在当客户端使用Range请求CDN节点时,CDN节点才会采用Range请求回源
  • 强制:无论客户端是否使用Range请求CDN节点,CDN节点都会采用Range请求回源(推荐)

多副本及自定义缓存(特殊场景使用)

在业务上需要对单URL进行多副本缓存时,主要实现方式主要有两种,如果您需要复杂的自定义缓存,推荐使用第一种:

1.CDN控制台-域名管理-管理-缓存配置中的 自定义cachekey 功能(推荐)

2.源站返回vary头控制CDN缓存行为

注意:多副本缓存推荐在默认缓存行为或忽略参数缓存功能无法满足业务需求时使用,对同URL的过多副本不利于缓存命中率,可能会产生较多回源浪费,配置时您需要合理评估参数的独立缓存必要性。

自定义cachekey

当我们想根据业务情况,结合path、参数、header等信息自定义cachekey的生成方式时,可以使用该功能。

我们列举基础场景帮助您的理解:

>场景1:对请求路径改写cachekey

http://aliyundoc.com/a/b/image.jpg

http://aliyundoc.com/a/b/c/image.jpg

如果我们希望将上述2个URL视为请求同一个文件,使用同一份缓存内容,因此生成cachekey时 需要忽略 /a/b ,即该文件的Cachekey为http://aliyundoc.com/c/image.jpg,配置方式如下图所示。

>场景2:将 HTTP Header 拼接到cachekey中

如果我们希望客户端请求的HTTP HEADER的User-AgentAccept-Language的值将被拼接到Cachekey中。

例如,请求http://aliyundoc.com/a/b/image.jpg中的部分请求头为:

User-Agent=Mozilla/5.0 (Linux; X11)

Accept-Language=en

则期望该请求的Cachekey为:http://aliyundoc.com/a/b/image.jpgMozilla/5.0(Linux;X11)en

除了上述两种基础场景外,您也可以根据业务需求探索配置,在自定义变量中支持正则匹配生成变量,可以满足更复杂的业务需求,详情可参考产品文档说明。

vary头

Vary 是一个 HTTP标准协议 响应头部信息,它被服务器用来表明在内容协商算法中选择一个资源代表的时候应该使用哪些头部信息。

通俗地我们可以理解为,服务器区分该缓存的适用对象时,通过vary判断要结合哪些Header的结果用于区分。

实现方式是源站通过在响应中,指定某一个或几个header头来标识资源的的版本。

例如,以文件压缩为例,可以根据用户请求Header中的Accept-encoding请求头来决定返回不同压缩格式的缓存:

  • 客户端请求头包含 Accept-encoding:gzip,服务端需要返回gzip压缩过的内容;
  • 客户端请求头包含 Accept-encoding:br,服务端需要返回br压缩过的内容。

在这种场景下,源站需要带:Vary:Accept-encoding来表明用Accept-encoding的值来做多副本。

以上就是搬主题分享的阿里云官方的教程,从域名添加到缓存优化设置加速的图文教程。

阿里云CDN活动地址:https://www.aliyun.com/product/cdn

千百度
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容