天翼云CDN最佳实践
CDN的最佳搭配是对象存储。视频点播、apk等文件下载分发建议使用对象存储,把文件放在对象存储上,将对象存储作为CDN的源站。如果是纯静态网站,甚至可以把整个网站全部放在对象存储上。
CDN可以起到隐藏源站IP的作用,防止源站IP遭到DDOS攻击。源站在负载均衡、下一代防火墙或者直接在云主机上对CDN节点配置白名单,其它地址访问将被拒绝。
天翼云CDN已支持将CDN和云WAF相结合,变身为SCDN即安全加速,同时拥有CDN加速、Web网站防护和抗DDOS功能。
使用CDN建议对业务进行调整,将动态和静态请求进行分离,让动态和静态请求切分到不同的域名。对静态请求接入CDN静态加速,对动态请求可根据需要接入全站加速或云WAF,如果源站有安全防护也可以动态请求直接回源站。
接入CDN后源站基于日志统计的访客访问统计将不再准确,可以在CDN控制台对访问进行分析统计,如访客省份、运营商、流量、请求数等等信息。
CDN缓存规则可以针对文件扩展名、指定目录、或者特定的访问链接。缓存时间要根据业务需求配置,对经常变更的文件缓存时间不要设得太长,不经常变更的文件缓存时间可以设长一些。缓存时间主要影响CDN回源站的流量。
如果源站对文件进行了更新而缓存没有过期,则访客收到的仍然是老文件,可以在CDN控制台进行强制刷新,刷新后缓存立即失效,访客将访问到新文件。可以对全站全部刷新,也可以只对指定的目录、指定的链接进行刷新。不建议全站刷新,全站刷新将造成回源流量短时间内增长。
对于视频点播等大文件,建议提前在CDN控制台上进行预热分发,把文件提前推送到CDN的中心节点,防止突发访问时产生大量回源请求,对源站造成压力。
可以在CDN控制台对命中率进行分析,如果命中率低,就说明有很多文件没有被CDN缓存,需要对热门回源链接进行分析,调整缓存策略。
可以在CDN控制台查看回源热门链接,如果回源链接是静态请求且请求量较大,说明该链接的文件没有被缓存或者缓存时间过短,需要对缓存配置进行优化。
可以在CDN控制台对http状态码及对应状态码的请求链接进行分析,重点检查4xx及5xx错误。如果404错误高,就说明网页中有死链且还有很多人访问,需要找到对应的链接进行解决。如果500及502错误高,说明Web服务器有内部错误或业务逻辑错误,需要结合Web服务器的日志进行排查。如果504错误高,说明有很耗时的应用超时了,需要调整CDN回源超时时间,或者是源站有丢包,需要对源站的网络质量进行检查。但要记住,这些错误不可能完全消除。如果访问到一个错误的链接或者有网络扫描,也会触发403或404错误。5xx错误不可能完全消除,只能尽量减少5xx错误,把5xx错误控制在业务正常运行范围以内。
如果通过CDN访问出现5xx错误或无法访问,可以通过修改电脑的hosts文件,将域名解析指向源站进行对比测试。如果确认问题在CDN且短时间内无法恢复,可以通过修改DNS指向源站,绕过CDN直接回源站。
新业务接入CDN在进行域名配置后,同样可以通过修改电脑hosts文件,将域名解析指向CDN节点进行测试。如果测试业务完全正常,则可以修改DNS,将CNAME记录指向CDN使业务切换到CDN。
新业务修改域名解析接入CDN后,可以通过站长之家ping检测 https://ping.chinaz.com/ 类似的服务进行检测,检查域名解析是否全网生效。
当前用户访问到的CDN节点可以通过在命令行下ping域名,或者在浏览器的开发者模式中查看。出现个别地方无法访问,在报故障时需要报告访问到的CDN节点,便于故障排查。
CDN调度是根据DNS请求判断访客的所在地,会尽量采用当地的CDN资源进行覆盖,比如CDN会尽量让湖南长沙电信用户会访问到湖南长沙的电信CDN节点,移动用户访问到湖南长沙的移动CDN节点。如果ping域名发现节点被调度到外省,甚至是其它运营商,说明DNS可能不是使用当地运营商DNS,可以检查自己的DNS设置。可以通过 http://nstool.netease.com 这个小工具检测,看看自己的DNS被递归到哪儿。
需要在各运营商的DNS逐步支持edns-client-subnet协议后,CDN调度中心能通过DNS请求获取访客的真实IP,做到更精确的调度,也就不再有湖南用户被调度到山东的问题。
114.114.114.114 这个DNS服务不是中国电信向公众提供的DNS服务,请尽量使用当地运营商提供的DNS服务。
CDN默认的策略是不对问号后面的参数进行缓存,则CDN把http://www.aaa.com/aaa.jpg 和 http://www.aaa.com/aaa.jpg?t=1644998252 当成两个相同的文件。不管后面的参数如何变化,实际文件还是同一份,则需要在缓存策略中开启去问号进行缓存,减少回源量。否则每个请求都要回源站去取。
如果某种类型的文件设置了缓存策略,但该类型文件的某些文件不需要缓存,需要确保每次访问到的都是最新版本,则需要关闭去问号缓存,同时在源站网页的静态链接后面带上一个参数,常见的是带上 ?t=1644998252 类似的参数,参数一般取当前的时间戳。这样每次访客刷新时由于时间戳变更了,浏览器不会缓存,CDN上也不会缓存,保证每次取的文件都是来自于源站的最新文件。