你來時攜風帶雨 我無處可避
你走時亂了四季 我久病難醫
——《人间失格》日/太宰治
What is CDN & Choice
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
归纳起来,CDN具有以下主要功能:
- 节省骨干网带宽,减少带宽需求量;
- 提供服务器端加速,解决由于用户访问量大造成的服务器过载问题;
- 服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;
- 能克服网站分布不均的问题,并且能降低网站自身建设和维护成本;
- 降低“通信风暴”的影响,提高网络访问的稳定性。
本文撰写过程中考虑过的CDN有阿里云CDN/腾讯CDN/七牛云CDN/百度CDN/Amazon CDN/Fastly/Cloudflare/jsDelivr等,简单说一下:
- 阿里腾讯七牛百度四家要求加速的网站在中国大陆备案,对于仅仅是个人部落格的搭建太过繁琐,我的域名cyfeng.science属于新顶级域名,工信部还暂时停止了此类顶级域名的备案,过
- Fastly是GitHub使用的加速CDN服务商,因为近期中国大陆对GitHub的DNS混淆,国内体验很差,而且价格不适合个人部落格
- Amazon CDN 在全球市场上处于领先地位,不适用纯粹是价格方面的考量,Amazon Cloud的新用户可以尝试一下,12个月每个月赠送免费的流量包
- Cloudflare CDN 对个人用户提供免费的套餐,虽然有些功能不能使用吧,总体而言体验良好(关键是免备案,省心省力)。未来Cloudflare将和百度CDN合作,在中国大陆地区布局CDN的建设,为适应我国国情,国内使用必须取得MIIT的备案
- jsDelivr CDN 是开源CDN,对于npm/GitHub/Wordpress三类进行加速。中国大陆地区jsDelivr和网宿公司合作,加速节点很充实。不过jsDelivr仅支持对公有仓库进行加速(开源嘛!),如果阅读过我上篇文章可以知道我现在使用的是
Hexo
+GitHub Pages
+私仓+GitHub Action
的配置(GitHub Action的配置可以参考 《使用GitHub Action集成Hexo自动部署GitHub Pages》 ),所以暂时舍弃了这种方式
Cloudflare
Cloudflare 是全球最大的 DNS 服务提供商之一。除此之外他们还提供 CDN、SSL 证书、DDos 保护等服务,并且 Cloudflare 与百度有合作,在国内也部署有大量的节点,还能顺便解决百度爬无法抓取 GitHub Pages 的问题。
开通服务
- 去Cloudflare注册一个账号
- 注册好后点击
Add site
添加需要配置CDN的域名 - 添加好后选择
Free
计划,$0/month - 点击
Scan DNS Records
,等待扫描完成。此时如果曾经在域名购买的网站添加过CNAME的解析,会直接获得一个指向xxx.github.io的CNAME条目,如果没有我们也可以后续自己添加 - 我们可以添加一条CNAME指向我们的
xxx.github.io
地址,添加A记录指向assets-cdn.github.com
对应的地址,通过ipaddress.com查询为如下四个IP地址185.199.108.153
/185.199.109.153
/185.199.110.153
/185.199.111.153
,详细方法可以查看我原先的一篇blog《寻找Github在当前网络状况下最佳Host解析地址》 - 然后 Cloudflare 会要求将 DNS 服务器替换成他提供的两个,需要我们去域名商那里设置一下,设置成功后会有传播延迟,过段时间Cloudflare确认更新成功后会发送邮件到账号注册邮箱
- 过段时间登录Cloudflare在你的网页下显示
Great news! Cloudflare is now protecting your site
说明设置成功
更多设置
Overview 面板

under attack mode
:当你的网站被攻击的时候打开它,在访问您的网站时向访问者显示JavaScript挑战,这样可以阻止攻击development mode
:由于 Cloudflare 采用了缓存技术,当你更新了网站的内容,不一定能马上在前台看到更新的内容。这个时候你只要打开 development mode 就可以马上看到网站更新的内容。当然,正常情况下还是关掉比较好
SSL/TLS 菜单设置

SSL
设置:如果你本来的网站有 SSL 证书(github pages提供),这里会显示full ,即浏览器到 Cloudflare 和 Cloudflare 到服务器都是加密的。Always Use HTTPS
设置:这个打开,一直使用 https 链接。Authenticated Origin Pulls
&Opportunistic Encryption
&Onion Routing
设置:这些设置都打开
Speed 菜单设置

Auto Minify
:网页最小化处理,把Javascript
/css
/html
前面都打勾即可(当然对于公共仓库js和css使用jsDelivr CDN做进一步的优化会取得更好的效果,毕竟Cloudflare在国内的节点性能不如网宿的好 XD)Brotli
:这是一种比 gzip 更好的网页压缩方式,打开即可
Caching 菜单设置

Caching Level
:缓存水平设置,决定缓存哪些内容,这里选择 standard 即可Browser Cache TTL
:即浏览器缓存过期时间,决定浏览器多久向网站获取一次新缓存Always Online
:如果您的服务器出现故障,Cloudflare将从缓存中为网站的静态页面提供服务。永不下线,打开
APPs 菜单设置
APPs里面提供了很多小程序,适当的添加几个常用小程序可以增加网页的流行性,当然代价是速度和冲突,自行选择
Back To Top Button / PACE 之类的都不错啦
What is DNS(补充)
Domain Name System是互联网的一项服务,它作为域名和IP地址互相映射的一个分布式系统,让用户更方便访问互联网。互联网通信是只认IP地址的,但一串数字人是记不住的,人容易记住的是apple.com这样的单词,这个叫域名,让电脑知道apple.com就是要访问122.224.45.229,就通过DNS域名解析系统。DNS系统中,常见的资源记录类型有:
- 主机记录(A记录):RFC 1035定义,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
- 别名记录(CNAME记录): RFC 1035定义,CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
- IPv6主机记录(AAAA记录): RFC 3596定义,与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
- 服务位置记录(SRV记录): RFC 2782定义,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等
Reference
- CDN百科
- Cloudflare
- DNS补充
- jsDelivr
- Hexo 配置 Cloudflare 免费 CDN
- 阿里云CDN
- 腾讯云CDN
- 七牛云CDN
- 百度云CDN
- Fastly
- 网宿科技