免备案加速Blog访问:Cloudflare CDN

你來時攜風帶雨 我無處可避
你走時亂了四季 我久病難醫

——《人间失格》日/太宰治

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 的问题。

开通服务

  1. Cloudflare注册一个账号
  2. 注册好后点击Add site添加需要配置CDN的域名
  3. 添加好后选择Free计划,$0/month
  4. 点击 Scan DNS Records,等待扫描完成。此时如果曾经在域名购买的网站添加过CNAME的解析,会直接获得一个指向xxx.github.io的CNAME条目,如果没有我们也可以后续自己添加
  5. 我们可以添加一条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解析地址
  6. 然后 Cloudflare 会要求将 DNS 服务器替换成他提供的两个,需要我们去域名商那里设置一下,设置成功后会有传播延迟,过段时间Cloudflare确认更新成功后会发送邮件到账号注册邮箱
  7. 过段时间登录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

  1. CDN百科
  2. Cloudflare
  3. DNS补充
  4. jsDelivr
  5. Hexo 配置 Cloudflare 免费 CDN
  6. 阿里云CDN
  7. 腾讯云CDN
  8. 七牛云CDN
  9. 百度云CDN
  10. Fastly
  11. 网宿科技