使用腾讯云CDN的这段时间,踩了不少坑,为了避免以后自己再犯这样的错误,也为了让更多人少犯甚至避免出现这样的错误,所以写了这篇博文记录下来。

一.常见错误

1.重定向错误

这种问题一般是因为源站、CDN、百度爬虫,这三者之间没有协同的缘故,源站如果设置了多个域名并且强制重定向到某一个域名(即访问多个域名都重定向到同一个域名),导致CDN回源请求时被反复重定向(除非CDN回源请求时请求的就是重定向之后的域名),CDN回源请求被重定向到网站加速域名,网站加速域名经过DNS又解析到CDN,CDN又回源请求……陷入死循环。最好是使用CDN之后源站就不要再设置重定向,避免出现这种bug。

错误示例:

回源HOST配置错误

回源HOST错误

百度spider抓取错误

首先要清楚回源HOST是什么?回源HOST是CDN请求服务器的网站资源的一个标识,也可以说是路径。假如服务器上存在多个网站,那么每一个网站对应的是服务器内的一个文件夹,外部访问网站输入网址(假定网址为www.a.com)时,DNS服务器会给这个网址返回一个IP地址,客户端拿到这个IP地址再去访问这个IP地址上的域名为www.a.com的内容。DNS服务器需要www.a.com索引到绑定的ip地址,而网站服务器需要www.a.com索引到部署的网站内容。

我在使用CDN的过程中发现,如果源站是使用的coding pages、github pages、gitee pages这样的静态网站托管服务,并且绑定了自定义域名,那么CDN设置的回源HOST就必须是这个自定义域名,因为以上这三个平台都会在绑定了自定义域名的情况下强制重定向到自定义域名,原来的域名访问会被重定向跳转到自定义域名,所以如果CDN使用了某个域名那这个域名就不能再和源站绑定,这样会造成301跳转错乱、死循环。

但是由于百度搜索引擎的DNS缓存,解绑之后会导致百度spider抓取不到网页内容(报404错误),只好又把原来的域名绑了回去,然后关闭了CDN的SEO搜索引擎自动回源。等待一段时间后,当抓取诊断的结果不再是coding pages并且还会多一些其他的HTTP头,就可以判断为不再被跳转到源站这时候就可以解绑源站的域名了。

开启SEO自动回源的结果

抓取诊断

关闭后

抓取诊断

2.命中率低,CDN加速效果不理想

这是因为CDN的缓存配置不合理,导致频繁回源拉取资源,首先得明白CDN加速的原理:

腾讯云 CDN 缓存资源为触发式,当用户发起针对某资源的访问,若请求触达的 CDN 节点未缓存该资源,则回用户源站拉取资源,成功拉取到资源(2XX状态码)后,在节点进行缓存并返回给用户。

您无法直接对 CDN 节点上缓存的资源进行管理,若担心源站资源可能发生变化而 CDN 节点仍缓存旧资源返回给用户,可通过配置节点缓存规则来进行一定程度的控制。

每一个 CDN 节点上的缓存资源都有“过期时间”的概念,若请求到的缓存资源已到期,即便节点仍有缓存,也会判定为无效,进行再次回源拉取。节点缓存规则配置支持指定某类型、某目录、路径的资源在节点的缓存过期时间,可根据实际业务场景进行配置。

就是客户端在访问网站发出请求的时候,CDN收到请求会检查节点有没有缓存资源,如果没有或者资源过期(缓存时间也就是过期时间)会拉取源站资源,此时下载速度受源站网络宽带的影响,导致下载速度慢。合理配置缓存时间也就变得非常重要了。

  • 若选择静态加速类型,常规动态文件(如 .php .jsp .asp .aspx)默认缓存过期时间为0(不缓存直接回源),其他所有文件类型默认过期时间为30天。
  • 若选择下载加速、流媒体点播加速类型,默认所有文件缓存过期时间为30天。

缓存时间最好是越久越好,但是频繁修改的内容和动态内容最好还是不要缓存,以免发送给客户端失去时效性的内容。

3.手动刷新缓存

缓存时间设置那么久,如果要刷新CDN节点的缓存怎么办?可以手动刷新!CDN都有刷新预热的功能

刷新预热

支持单个页面(文件)刷新,也支持目录(整个目录下的所有内容)刷新。

目录刷新如何使用?当访问www.a.com时,实际上访问的是www.a.com/index.html或者www.a.com/index.php……,因为没有指定确切的文件,服务器默认会认为访问的是在这个目录下的index.html文件,或者php文件……等等,实际上`www.a.com/`就已经是指向了站点的根目录,刷新站点根目录下的所有内容输入这个域名就可以了。而要刷新根目录下的某个目录,比如image目录:输入`www.a.com/image/`就行。

PS.记得前面加上http://或者https://