如何使用阿里云 CDN 对部署在函数计算上的静态网站进行缓存
nanshan 2024-11-08 12:39 11 浏览 0 评论
简介:为了进一步提升网站的访问速度,我们会使用 CDN 对网站进行加速,但是最近在调试阿里云的函数计算和 CDN 的配合使用时发现了一个需要额外注意的地方。
作者:邓超 | Serverless Devs 开源贡献者
前言
为了进一步提升网站的访问速度,我们会使用 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 上进行调整。
另外,多看看文档。
参考链接:
[1] 博客站
https://blog.dengchao.fun/
[2] MDN 上对于 Cache-Control 响应头的文档
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/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] 什么是 Cache Control 响应头
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
原文链接:http://click.aliyun.com/m/1000342593/
本文为阿里云原创内容,未经允许不得转载。
相关推荐
- 今晚拿下PHP反序列化的一系列操作
-
引言在CTF中反序列化类型的题目还是比较常见的,之前有学习过简单的反序列化,以及简单pop链的构造。这次学习内容为php内置的原生类的反序列化以及一点进阶知识。在题目给的的代码中找不到可利用的类时,这...
- Win10安装Apache和PHP(apache安装php模块)
-
说明:虽然PHPStudy之类的软件给我们提供了方便的集成环境,但是其使用的是非线程安全的PHP版本(NotThreadSafe,NTS),某些功能不可以使用。所以,我们还需要自己再安装一个Apa...
- 腾讯云云函数部署laravel项目(腾讯云函数 selenium)
-
1、购买函数套餐包在Serverless控制台,选择函数套餐包进行购买2、新建函数服务2.1、模板创建选择函数URL:新建函数URL,启用公网访问:2.1.1、postman访问首页2.1.2、pos...
- 站长教你搭建属于自己的网站(站长教你搭建属于自己的网站是什么)
-
每个人都希望可以有自己的网站,因为那样高端大气上档次,低调奢华有内涵,尤其是公司用户,一般会有自己的网站。而个人呢,也可以搭建自己的网站博客,论坛等,但是一般个人都是搭建博客的。好了,那么下面站长教你...
- 微信公众号开发出现 cURL error 60: SSL certificate problem ssl证书
-
在phpstudy的环境下如果出现这样的报错cURLerror60:SSLcertificateproblem:unabletogetlocalissuercertificat...
- 【网络安全】关于PHP Study nginx解析高危漏洞的预警通报
-
网络安全近日,山石网科安全研究院监测发现PHPStudyWindows最新版本存在nginx解析漏洞,可以造成任意代码执行。一、漏洞情况phpStudy是一个PHP调试环境的程序集成包,该程序包集成...
- PHP 环境 搭建教程(php环境搭建教程linux)
-
PHP是一种编程语言,很多网站都用PHP语言编写,我们有时候需要测试一个网站,就需要PHP环境才能运行,又要安装Apache、又要安装MySQL……真的非常麻烦。其实我们可以使用PHP集成...
- 黑客搭建钓鱼平台,手把手教你如何钓鱼?
-
跨站脚本攻击XSS:通过HTML注入篡改了网页,插入了恶意的脚本,从而用户浏览网页时,控制用户浏览器的一种攻击那么,我们搭建一个XSS钓鱼平台吧,注意:这个平台仅用于学习和测试,小伙伴们不要动有坏心思...
- php源码网站搭建方法和过程(php网站源码完整)
-
web网站是我们上网的窗口,而网站是如何搭建的呢?今天我们来做一个介绍,以php代码为例来进行介绍(后续会介绍一下java代码搭建,如果想要我这里涉及的工具或源码请私信我)。1、首先你需要去网上下载你...
- 使用VS Code调试PhpStudy环境里的代码
-
最近几个月把所有项目都迁过来VSCode了(除了因为Unity调试问题反而用回了VisualStudio),PHP也就抛弃了最强的PhpStorm。这段时间抽空在帮朋友处理PHP项目,然...
- phpstudy搭建PHP+Mysql服务(用phpstudy搭建服务器)
-
PHP是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP是免费的,并且使用非常广泛。同时,对于像微软ASP这样的竞争者来说,PHP无疑是另一种高效率的选项。(1)PHP环境搭建使用V...
- Windows安装phpstudy(Windows安装mysql)
-
说明:phpstudy是一个PHP+MySQL+Apache的集成环境,可以减少单独部署各个所需软件的麻烦,以及更加方便地切换版本。phpenv、wamp等软件的作用一样。由于环境的不同,安装过程中可...
- phpstudy安装及简单使用教程(phpstudy安装教程详解)
-
phpstudy前不久爆出有后门,我的看法是,去看下是哪个版本有后门,为啥会有后门,怎么解决掉这个后门,而不是听到后门就弃用了。毕竟phpstudy绿色安装,配置简单,多版本融合,真香。前言:关于开发...
- 如何对dedeCMS的开源程序进行二次开发
-
二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核。为了让更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会...
- mysql基础问题三问(底层逻辑;正在执行;日志观察)
-
背景:经常面试会遇到且实际工作中也会应用到的三个场景:目录:一.mysql查询时的底层原理是什么?二.如何查看正在执行的mysql语句?三.如何观察mysql运行过程中的日志信息?-----...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
- 最近发表
-
- 今晚拿下PHP反序列化的一系列操作
- Win10安装Apache和PHP(apache安装php模块)
- 腾讯云云函数部署laravel项目(腾讯云函数 selenium)
- 站长教你搭建属于自己的网站(站长教你搭建属于自己的网站是什么)
- 微信公众号开发出现 cURL error 60: SSL certificate problem ssl证书
- 【网络安全】关于PHP Study nginx解析高危漏洞的预警通报
- PHP 环境 搭建教程(php环境搭建教程linux)
- 黑客搭建钓鱼平台,手把手教你如何钓鱼?
- php源码网站搭建方法和过程(php网站源码完整)
- 使用VS Code调试PhpStudy环境里的代码
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)