CDN加速

自从有了第一次博客优化经验,我就越发对优化感兴趣了嘿嘿(✧∇✧)。

看着博客首页打开时长为1200ms左右,我又开始琢磨有什么办法能再给网站提提速,让访问时间降低到1000ms以下,这时候我想起前不久群里讨论过这个问题,我翻回去看见他们提到了CDN加速

CDN加速?好耳熟(ㅇㅅㅇ❀)...我之前也听过,不过概念还停留在就近获取网络资源上,今天就让我们一起学习一下什么是CDN,如何配置CDN加速。

CDN介绍

CDN是content delivery network或者是content distribution network的缩写,即内容分发网络。

CDN介绍起来很简单,原来也不复杂,说白了就是利用物理上的多台服务器,将用户需要的音乐、图片、视频、应用程序等资源分布式存储在全球各地,这样用户便可以高效、稳定的就近获取需要资源。

但是为什么需要CDN呢?

原因有两点:

其一互联网快速发展和网民的急速增多,导致原本宽裕的网络通道变得拥挤,一万个人同时使用一条网络通道和一亿人同时使用一条网络通道的体验显然是完全不一样的。

其二就是距离,试想一下如果我们要从美国那边请求一个资源,美国与中国之间的直线距离是11,160公里,而光速大概为30万公里/s,由此可以推算出一个请求和响应加起来需要74.4ms,看起来很少是不是,但这是最最理想的情况。需要从美国直接拉一条一万公里的光缆直通中国才能达到,想想就不现实,更何况还有网络拥堵、光缆速度达不到光速等诸多因素。

所以CDN出现了,用户不需要跨越上万公里去获取资源,只需要获取缓存在就近服务器上的资源就可以了,这样不仅避免了多人共用一条线路,也解决了超长距离的问题。

了解完CDN,我已经迫不及待开始实践了!

多吉云CDN加速

为什么选择多吉云的CDN加速呢?

好问题

因为当我准备去跟群里大佬一样白嫖百度CDN加速的时候。发现...从2023/05/05开始百度不再免费接入域名了(ノДT)。

于是我去网上找了一下,发现还有几个云服务商还提供每月免费额度的流量的CDN服务,本来我准备选择七牛云,毕竟在云服务这块还是蛮有名的,然鹅不支持https,只支持http,多方比对之下最后选择了多吉云。

多吉云注册后,每个月会有20G的免费流量,超过后就要收费了,并且支持https。

操作步骤

首先需要注册多吉云,然后进行实名认证,之后就可以绑定我们的域名进行CDN加速了。

一、绑定域名

首先我们需要对加速域名进行绑定:



加速域名就填写需要加速的域名,业务类型按照下面介绍选择,博客一类的网站选择网页小文件就可以,在源站IP中填入自己的服务器地址,协议根据自己网站选择,最后确认绑定。

二、验证域名所有权

输入域名和服务器IP确认绑定后,需要到服务器进行DNS验证域名所有权,我是阿里云服务器,所以去阿里云的域名解析里面添加规则:

三、加速域名测试

验证成功后等待部署创建加速域名:



等待五分钟左右刷新页面,就可以看到CDN加速域名CNAME了,接下来就可以去阿里云修改DNS记录进行域名转发了。

但如果你的网站是已上线网站,为了保证现有业务稳定运行,建议先在本地通过 Hosts 文件绑定 CDN 节点 IP 进行访问测试。

本地测试

  1. 加速域名添加成功后,融合 CDN 控制台的域名管理页中的域名列表的 CNAME 列会给出域名的 CNAME 值,例如www.lemondu.top.s2-web.dogedns.com。
  2. 复制该 CNAME 值,打开你电脑上的终端(Windows 系统为 CMD),输入并运行指令:
ping www.lemondu.top.s2-web.dogedns.com



命令行中显示的 IP,即为 CDN 节点 IP。

  1. 将上一步获取到的节点 IP(61.170.72.248),通过修改本地 Hosts 文件,绑定到加速域名(www.lemondu.top)。 Hosts 文件:

  2. 保存后,在本地通过浏览器访问加速域名进行测试,如果符合预期,说明配置正确。

配置 CNAME

本地测试成功后,就可以正式将CNAME配置到域名解析中了,依旧是在域名解析中添加记录,记录类型选择CNAME,并且如果有同名的 A 类型(或 AAAA 类型)记录,添加时可能会提示冲突,你需要先删除对应的 A 记录或者将其暂停。

添加记录完成后,最后还需进行测试。要验证 CNAME 是否配置成功,可以使用命令行工具测试:

nslookup -qt=cname 加速域名

若是成功,则会返回如下图所示结果:



如果程序显示的 canonical name 和多吉云控制台提供的 CNAME 值一致,则表示你的加速域名已经成功配置 CNAME,加速生效了。

效果

最后我们测试一下加速后的效果:



入站速度成功降低到了1000ms以下,效果达成!

防患于未然

别走,还有最后一步!这步很重要,那就是给CDN进行限流,现在大部分的CDN提供商都是实行超过流量自动欠费的机制,虽然个人网站一般不会有那么大的流浪,但如果哪天你的网站一不小心被恶意攻击者临幸了,那极有可能造成较大的财产损失。

所以我们需要进行流量限制,一般服务商都会提供这个功能,但不会主动提醒你开启(很贼),免费流量为20G,我将流量限制在了月19G,当这个月使用流量超过19G的时候就会停用域名,那时候访问就会变成404了,另外还有一些一些小时间段的限流,按分钟或天计算,还有单个链接的限流等等,可以根据实际情况进行开启。

缓存策略

接入CDN之后,我发现每次加载的内容都是一样的,就算发布了新文章也还是会加载到刚接入CDN时的样子,CDN的本质是就近缓存。

是不是我缓存策略没设置好?

进入多吉云控制台一看,果然,默认设置的是缓存全部资源:



我们需要关闭原来的全部缓存,换为静态资源缓存,第三条就是自己添加的静态资源缓存。

重新部署生效后,问题解决!

优化博客Ⅱ-CDN加速的更多相关文章

  1. OO第二单元优化博客

    OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...

  2. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  3. hexo next主题深度优化(七),cdn加速。

    文章目录 注: 正题: 免费cdn 收费cdn 个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...

  4. 第 15 篇:优化博客功能的细节,提升使用体验—— HelloDjango 系列教程

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在之前的系列教程中,我们已经实现了:文章的发布.展示.评论等功能,可能认真的小伙伴已经 ...

  5. SqlServer优化博客网址

    CareySon Sql Server MVP : http://www.cnblogs.com/CareySon/

  6. VuePress 博客优化之开启 Algolia 全文搜索

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 由于 V ...

  7. VuePress 博客之 SEO 优化(三)标题、链接优化

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  8. VuePress 博客之 SEO 优化(二)重定向

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  9. VuePress 博客之 SEO 优化(一) sitemap 与搜索引擎收录

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  10. VuePress 博客优化之增加 Vssue 评论功能

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

随机推荐

  1. dotnet core微服务框架Jimu介绍

    jimu是一个基于.Net6.0 简单易用的微服务框架,参考了很多开源库以及想法,使用了大量的开源库(如 DotNetty, consul.net, Flurl.Http, Json.net, Log ...

  2. C#使用Socket实现分布式事件总线,不依赖第三方MQ

    使用 Socket 实现的分布式事件总线,支持 CQRS,不依赖第三方 MQ. CodeWF.EventBus.Socket 是一个轻量级的.基于 Socket 的分布式事件总线系统,旨在简化分布式架 ...

  3. 使用免费的SVN服务器

    在本地环境中安装SVN window版本自行搜索图文教程. linux版本(以我的 ubuntu 为例子) 我尝试直接敲SVN svn 报错 Command 'svn' not found, but ...

  4. Open-RAG:将开源LLM模型集成为高效RAG模型 | ENMLP'24

    本文是对公开论文的核心提炼,旨在进行学术交流.如有任何侵权问题,请及时联系号主以便删除. 来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Open-RAG: Enhanced Retriev ...

  5. MagicQuill,AI动态图像元素修改,AI绘图,需要40G的本地硬盘空间,12G显存可玩,Win11本地部署

    最近由 magic-quill 团队开源的 MagicQuill 项目十分引人瞩目,这个项目可以通过定制的 gradio 客户端针对不同的图像元素通过提示词进行修改,从而生成新的图像.值得一提的是,这 ...

  6. golang读取文件

    golang 按行读取文件 file, err := os.Open("app-2019-06-01.log") if err != nil { log.Fatal(err) } ...

  7. Java线程池Executors

    一 简述 线程池,作为一个管理一组同构工作线程的资源.接受提交的任务,利用线程池中的线程进行工作的处理. 在另一篇<Java多线程设计模式(4)线程池模式>利用非Executors描述了线 ...

  8. 子组件监听props中的值,监听不到旧值的相关问题

    昨天,在项目中做一个功能,一个tab切换,点击其中一个tab的时候,调用组件中的查询方法,切只调用一次.再次切换的时候不再调用. 我的做法是: 在父组件中创建一个变量,初始化data中设为0,在点击t ...

  9. Django消息队列之django-rq

    github:https://github.com/rq/django-rq RQ(Redis Queue),人如其名,用 redis 做的队列任务 redis ,众所周知, 它的列表可以做队列,rq ...

  10. Golang基础库之net/http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现. HTTP协议 超文本传输协 ...