共计 2817 个字符,预计需要花费 8 分钟才能阅读完成。
前言
为了进一步晋升网站的访问速度,咱们会应用 CDN 对网站进行减速,然而最近在调试阿里云的函数计算和 CDN 的配合应用时发现了一个须要额定留神的中央,上面带大家一起看一下。
如何应用 CDN 对部署在函数计算上的动态网站进行缓存
以我部署在函数计算上的博客站 [1] 为例,逐渐地向大家介绍如何应用 CDN 对函数计算托管的动态网站进行缓存。
为函数增加 CDN 性能
1)为函数调配域名并增加 CNAME 记录
因为我心愿最终用户能通过 blog.dengchao.fun 来进行拜访,因而须要给函数调配一个不同的域名 blog.xxx.dengchao.fun:
2)增加自定义域名并设置路由
将调配的域名设置到函数计算的自定义域名性能中:
因为 CDN 上也能够设置 HTTPs,而且函数计算之前不能设置 SSL 协定版本,因而这里没有开启 HTTPS 性能。
**3)增加源站类型为 “ 函数计算域名 ” 的 CDN
接下来到 CDN 管制台上新建一个减速域名:
用户最终将通过减速域名 blog.dengchao.fun 来拜访我的博客站。业务类型选项不会影响最终的减速成果,能够任意选。
而后增加一个源站:
因为函数计算的自定义域名没有开启 HTTPS,所以源站的端口须要设置为 80 端口,同时也能够缩小回源时的响应工夫 (实际效果微不足道)。
4)增加 CNAME 类型的 CDN 减速域名记录
设置完源站信息并保留后,阿里云会对源站内容进行审核,审核通过的话就会提供一个 CDN 服务供应商的域名给你:
接下来你须要将你的减速域名解析到 CDN 服务商提供的域名上:
增加好 CNAME 记录后,CDN 管制台上过一会儿就会显示为 “ 已配置 ” 状态,而后你就能够应用配置好的减速域名进行拜访了。
设置 CDN 缓存
光配置好减速域名还不够,不然用户每次拜访减速域名都须要从源站拉取数据,因而咱们须要在 CDN 上设置一下缓存,缩小回源次数。
**1)增加缓存过期工夫规定
假如咱们心愿 CDN 节点可能对网站根目录下的所有内容都缓存 1 天,那么咱们须要在 CDN 减速域名的缓存治理页增加对应的配置:
原本操作到这里的时候我就认为缓存设置好了,但网站运行了一段时间后察看 CDN 的监控却发现缓存命中率始终很低。通过观察浏览器控制台里的网络申请日志,一一申请头进行剖析,最终发现了一点异样:源站将 Cache-Control 响应头设置为了 public,max-age=0。
2)修复 Cache-Control 响应头
认真查看了 MDN 上对于 Cache-Control 响应头的文档[2],以及阿里云 CDN 对于缓存过期工夫配置的介绍[3] 后,确认了之前的 CDN 缓存配置存在缺点。(典型的不看文档吃大亏)
定位好问题当前,解决思路也很清晰了:想方法删掉源站的 Cache-Control 响应头就好了。
计划一:批改源站 HTTP 服务器返回的 Cache-Control 响应头
既然源站的 HTTP 服务器将 Cache-Control 响应头设置成了 max-age=0,那咱们把源站的 HTTP 服务器改一下不就好了。
但思考到咱们部署在函数计算上的动态网站是由 website-fc 插件生成的 Express 服务器进行托管的,如果批改的话,须要从本地的 website-fc 插件源码动手进行调整,但 website-fc 插件可能不定期更新, 那咱们就须要不定期的进行查看,视状况从新打补丁,执行起来很费劲。因而咱们不能选用这个计划。
计划二:配置 CDN,删除源站 HTTP 服务器返回的 Cache-Control 响应头
再次查看文档发现阿里云 CDN 提供了配置回源 HTTP 响应头 [4] 的性能,其中蕴含了删除回源响应头的性能。因而咱们能够借助这个性能,让 CDN 删除掉源站返回的 Cache-Control 响应头。
配置好当前, 再次察看减速域名下网络申请的响应头,发现的确没有 Cache-Control:public,max-age=0 的响应头了。
3)成果比照
因为博客站的访问量并不高,成果不显著 (几乎看不出来😂)。因而截取了另一个访问量绝对较大的网站的监控截图:
首先是访问量比照,从监控数据来看近两天没有显著的访问量差别:
而后是回源流量比照, 发现删除 Cache-Control 响应头当前回源流量显著降落:
同时字节命中率与申请命中率都有显著的晋升:
看来咱们配置的缓存的确失效了。
总结
配置好 CDN 减速域名和缓存过期工夫规定当前,记得查看源站的响应头。如果源站的响应中已有缓存管制相干的响应头,那么视状况在源站的 HTTP 服务器上或 CDN 上进行调整。
p.s 减速原理 [7] 假如您的减速域名为 www.aliyundoc.com,接入 CDN 开始减速服务后,当终端用户在北京发动 HTTP 申请时,解决流程如下图所示:
参考链接:
博客站:https:_//blog.dengchao.fun/_
MDN 上对于 Cache-Control 响应头的文档:https:_//developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control_
阿里云 CDN 对于缓存过期工夫配置的介绍:https:_//help.aliyun.com/document_detail/27136.html#title-p27-252-g92_
配置回源 HTTP 响应头:https:_//help.aliyun.com/document_detail/155769.html_
阿里云函数计算文档:https:_//help.aliyun.com/product/50980.html_
阿里云 CDN:https:_//help.aliyun.com/document_detail/27101.html_
减速原理:https:_//help.aliyun.com/document_detail/27101.html#title-sbn-geq-2ez_
配置回源 HTTP 响应头:https:_//help.aliyun.com/document_detail/155769.html_
什么是缓存:https:_//help.aliyun.com/document_detail/122553.html_
配置缓存过期工夫:https:_//help.aliyun.com/document_detail/27136.html_
缓存规定与优先级:https:_//help.aliyun.com/document_detail/27136.html#title-p27-252-g92_
什么是 Cache Control 响应头:https:_//developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control_
更多内容关注 Serverless 微信公众号(ID:serverlessdevs),会集 Serverless 技术最全内容,定期举办 Serverless 流动、直播,用户最佳实际。