作者:邓超| Serverless Devs 开源贡献者

前言

为了进一步提升网站的拜访速度,咱们会运用 CDN 对网站进行加快,但是最近在调试阿里云的函数核算和 CDN 的配合运用时发现了一个需求额外留意的当地。

如何运用 CDN 对布置在函数核算上的静态网站进行缓存

那么以我布置在函数核算上的博客站 [ 1] 为例,逐渐地向大家介绍如何运用 CDN 对函数核算保管的静态网站进行缓存。

为函数增加 CDN 功用

1)为函数分配域名并增加 CNAME 记载

由于我期望终究用户能经过blog.dengchao.fun来进行拜访,因而需求给函数分配一个不同的域名blog.xxx.dengchao.fun:

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

2) 增加自定义域名并设置路由

将分配的域名设置到函数核算的自定义域名功用中:

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

因为 CDN 上也能够设置 HTTPs,并且函数核算之前不能设置 SSL 协议版别,因而这里没有敞开 HTTPS 功用。

3) 增加源站类型为 “函数核算域名” 的 CDN

接下来到 CDN 操控台上新建一个加快域名:

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

用户终究将经过加快域名blog.dengchao.fun来拜访我的博客站。业务类型选项不会影响终究的加快作用,能够任意选。

然后增加一个源站:

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

由于函数核算的自定义域名没有敞开 HTTPS,所以源站的端口需求设置为 80 端口,同时也能够减少回源时的呼应时刻 (实际作用微不足道)。

4) 增加 CNAME 类型的 CDN 加快域名记载

设置完源站信息并保存后,阿里云会对源站内容进行审阅,审阅经过的话就会供给一个 CDN 服务供货商的域名给你:

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

接下来你需求将你的加快域名解析到 CDN 服务商供给的域名上:

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

增加好 CNAME 记载后,CDN 操控台上过一瞬间就会显现为 “已装备” 状况,然后你就能够运用装备好的加快域名进行拜访了。

设置 CDN 缓存

光装备好加快域名还不行,否则用户每次拜访加快域名都需求从源站拉取数据,因而咱们需求在 CDN 上设置一下缓存,减少回源次数。

1)增加缓存过期时刻规矩

假设咱们期望 CDN 节点能够对网站根目录下的所有内容都缓存 1 天,那么咱们需求在 CDN 加快域名的缓存办理页增加对应的装备:

如何使用阿里云 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呼应头。

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

装备好以后, 再次调查加快域名下网络恳求的呼应头,发现的确没有Cache-Control:public,max-age=0的呼应头了。

3)作用比照

由于博客站的拜访量并不高,作用不明显 (简直看不出来)。因而截取了另一个拜访量相对较大的网站的监控截图:

首先是拜访量比照,从监控数据来看近两天没有显著的拜访量差异:

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

然后是回源流量比照, 发现删去Cache-Control呼应头以后回源流量显著下降:

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

同时字节命中率与恳求命中率都有显著的提升:

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

看来咱们装备的缓存的确收效了。

总结

装备好 CDN 加快域名和缓存过期时刻规矩以后,记得检查源站的呼应头。假如源站的呼应中已有缓存操控相关的呼应头,那么视状况在源站的 HTTP 服务器上或 CDN 上进行调整。

别的,多看看文档。

参考链接:

[1] 博客站

blog.dengchao.fun/

[2]MDN 上关于 Cache-Control 呼应头的文档

developer.mozilla.org/zh-CN/docs/…

[3]阿里云 CDN 关于缓存过期时刻装备的介绍* help.aliyun.com/document_de…

[4]装备回源HTTP 呼应头

help.aliyun.com/document_de…

[5]阿里云 函数核算

help.aliyun.com/product/509…

[6]阿里云 CDN

help.aliyun.com/document_de…

[7]加快原理

help.aliyun.com/document_de…

[8]装备回源 HTTP 呼应头

help.aliyun.com/document_de…

[9]什么是缓存

help.aliyun.com/document_de…

[10]装备缓存过期时刻

help.aliyun.com/document_de…

[11]缓存规矩与优先级

help.aliyun.com/document_de…

[12]什么是 Cache Control 呼应头

developer.mozilla.org/zh-CN/docs/…

1分钟 Serverless 布置个人网盘

翻开卡片仿制地址

1 分钟自建一个真网盘

1 步拿到百变指尖陀螺!

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

本场景基于 Serverless 应用中心 + 阿里云函数核算 + 开源企业级在线文件办理体系 KodBox 打造,让你仅用 “几次” 点击,拥有一个可随意保存资源、不限速下载、多端运用、与朋友共享资源……的专属个人网盘。

时刻: 5 月 9 日 – 5 月 20 日(工作日期间)

奖品: 每日 200 个百变指尖陀螺

主张: PC 端体会

点击「此处」,一键布置个人网盘!