如何使用阿里云对部署在函数计算上的静态网站进行缓存

核心提示前言为了进一步提升网站的访问速度,我们会使用 CDN 对网站进行加速,但是最近在调试阿里云的函数计算和 CDN 的配合使用时发现了一个需要额外注意的地方。如何使用 CDN 对部署在函数计算上的静态网站进行缓存那么以我部署在函数计算上的博客站

为了进一步提高网站的访问速度,我们会使用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)修复缓存控制响应报头。

仔细查看了MDN上关于Cache-Control响应头的文档[2]和阿里云CDN关于缓存过期时间配置的介绍[3]后,确认之前的CDN缓存配置存在缺陷。

定位问题后,解决方案很明确:想办法删除源站的Cache-Control响应头就行了。

方案一:修改源站HTTP服务器返回的Cache-Control响应头。

既然源站的HTTP服务器已经设置了Cache-Control响应头为max-age=0,为什么我们不改变源站的HTTP服务器呢?

但考虑到我们在函数计算中部署的静态网站是由网站-fc插件生成的Express服务器托管的,如果修改,需要从本地网站-fc插件源代码进行调整。但是网站-fc插件可能会不定期更新,所以我们需要不定期检查,必要时再打补丁,实现起来非常费力。所以我们不能选择这个方案。

方案二:配置CDN,删除源站HTTP服务器返回的Cache-Control响应头。

再看文档,发现阿里云CDN提供了配置回源HTTP响应头的功能[4],包括删除回源响应头的功能。所以我们可以用这个函数让CDN删除源站返回的Cache-Control响应头。

配置完成后,再次观察加速域名下网络请求的响应头,发现确实没有cache-control: public和max-age=0的响应头。

3)效果对比

因为博客站访问量不高,效果不明显。所以拍了另一个访问量比较大的网站的监控截图:

首先,是访问量的对比。从监测数据来看,近两天的访问量并没有明显差异:

然后与回源流量进行比较,发现删除缓存控制响应头后,回源流量明显下降:

同时,字节命中率和请求命中率显著提高:

看来我们配置的缓存确实生效了。

摘要

配置CDN加速域名和缓存过期时间规则后,记得检查源站的响应头。如果源站的响应中已经存在与缓存控制相关的响应头,则在源站的HTTP服务器或CDN上进行适当的调整。

另外,看文档。

参考链接:

[1]博客站

https://blog.dengchao.fun/

[2]MDN上缓存控制响应报头的文档

https://developer . Mozilla . org/zh-CN/docs/Web/HTTP/header/Cache-Control

[3]阿里云CDN对缓存过期时间配置的介绍

https://help . aliyun . com/document _ detail/27136 . html # title-p27-252-g92

[4]配置回源HTTP响应报头

https://help.aliyun.com/document_detail/155769.html

[5]阿里云函数计算

https://help.aliyun.com/product/50980.html

[6]阿里云CDN

https://help.aliyun.com/document_detail/27101.html

[7]加速原理

https://help . aliyun . com/document _ detail/27101 . html # title-sbn-geq-2ez

[8]配置回源HTTP响应报头

https://help.aliyun.com/document_detail/155769.html

[9]什么是缓存?

https://help.aliyun.com/document_detail/122553.html

[10]配置缓存过期时间

https://help.aliyun.com/document_detail/27136.html

[11]缓存规则和优先级

https://help . aliyun . com/document _ detail/27136 . html # title-p27-252-g92

[12]什么是高速缓存控制响应报头?

https://developer . Mozilla . org/zh-CN/docs/Web/HTTP/header/Cache-Control

作者:邓超|无服务器开发开源贡献者

原文链接:http://click.aliyun.com/m/1000342593/

本文为阿里云原创内容,未经允许不得转载。

 
友情链接
鄂ICP备19019357号-22