如果觉得CloudFlare CDN对国内加速不够明显,推荐看看《Vercel Zeit now自动部署Github为hexo博客加速

托管在GitHub Pages

为何要托管于 GitHub上,因为没有备案。在国内,域名不备案都无法解析到国内的云服务商上面,那么此域名就无法适用于国内的云服务。

当然也可以自己做内网穿透,放到树莓派等ARM架构的小型服务器上。我之前想先折腾,但近些年来越来越没有这种折腾的精神,故此托管于 GitHub Pages

因为 GitHub Pages是国内程序员的聚集地,也是很多开源项目的托管地,所以 GitHub Pages对程序员尤为重要。或许因此原因,尽管 GitHub Readme文件中有很多违规内容,至少对于我们国家来说是违规的,然并没有完全被 墙掉

这也使得我较为放心的把自己的站点放在上面而不用担心哪天不能访问,但国内的网络环境尤为复杂。你要说不同地区,不同的网络运营商访问这样的站点速度不一样倒也还可以理解,但同一个地区,同一个运营商的网络,都会出现巨大的差异性。

以我自己为例,我连接 中国移动带宽的WIFI,可以访问,用纯数据流量的 中国移动网络,却不能访问。当然也不是一直不能访问,只要稍微了解”墙“这玩意,就知道类似于这些站点,不同地区,不同网络,不同时间段,情况都大有不同。

不同到我无法总结和归纳,用大家常说的话就是 抽风。但平常自己访问也挺慢的,快的时候较少,很玄学的说。

小破站虽然没什么访问量,但自己都没法访问,还是有些不能忍的,于是我就想起了 静态资源前端库之类的文件进行“动静分离”。

因为本站就是一个纯静态的网站,所以不存在“动静分离”一说。故此我想说的是把 静态资源前端库之类的文件放到国内的 对象存储上,这样尽可能的减少网站访问的加载时间。

经过一整天的折腾,终于把这类资源分离出来了,好在主题提供了可自定义链接,不然我一个不会前端(全端)的人,是无法搞定这样的工作。

处理好之后,赶忙 pushGitHub Pages,自己访问测试后大失所望,我自己都不知道这个速度有没有提升。感觉好像似乎有所提升,从理论上来讲,肯定是有所提升的。

但实际情况,一个网页被浏览器访问后,它背后的工作原理还是较为复杂的,我也讲不大清。总之,浏览器得先把 index.html这样的文件载入到本地并且解析,然后才会根据 index.html文件中的内容去下载所需的资源,我想我的问题是卡在了这个 index.html文件上,因 index.html文件的加载时间无法缩减,毕竟访问的还是 GitHub Pages上的资源,尽管把 css, js等资源移入了国内的服务器上。

CloudFlare

CloudFlare的名气很大,免费用户都为其提供“一定”额度的 DDoS攻击防护,我不清楚 CloudFlare有没有限制额度,看官网所写的话是“DDoS 攻击防护”,没写多少防护量。

有可能是不限额度的,因为很多非法网站都是用 CloudFlare来做防护,这里面的非法网站很多还是个人所搭建的,我想也不大可能去付费,特别是中国用户,没有良好的付费习惯。

CloudFlare还和国内的百度有合作,官网是这么写的“通过与百度结成战略合作伙伴,我们创建了唯一真正整合的全球网络,为中国境内外的访问者提供快速、安全、可靠的体验。中国的互联网架构与世界其它地区不同。 中国的网络由三家主要的互联网服务提供商 (ISP) 控制 - 中国电信、中国联通、中国移动。 由于其网络之间的互连(对等互连)有限,因此经常出现拥塞,这会导致高延迟和数据包丢失。 即使在中国的 ISP 网络中(例如,北京的中国电信和广州的中国电信),网络质量也会有很大差异。因此,为了优化整个中国的内容传输,必须在中国各地拥有地理位置分散的数据中心,并与每个地区的主要 ISP 建立连接,这正是我们的中国服务为客户提供的服务。”

写的很含蓄,因为没有备案,所以无法用百度的 CDNCloudFlare对接,具体如何对接我也没了解过。但又按 CloudFlare官网描述的所说“China Network 适用于所有 Cloudflare Enterprise 客户”。看起来是需要企业用户,并且给 CloudFlare认证审核后才能适用,或许使用了后比我们个人用户直接这样“干用” CloudFlare速度要快很多吧。

  • 注册一个 Cloudflare Enterprise 帐户。
  • 向 Cloudflare 确认您拥有有效的 Internet 内容提供商 (ICP) 许可证。 ICP 许可证由中国工业和信息化部 (MIIT) 颁发,要在中国大陆托管或缓存在线内容,需要该许可证。 如果您目前没有 ICP 许可证,我们的“Customer Success”团队可以指导您完成申请流程。
  • 在 Cloudflare Enterprise 帐户仪表板中,在“网络”应用下开启“启用中国”按钮。
  • 打开 China Network 后,可以访问“Crypto”应用程序并配置您的 SSL 证书以在 China Network 上进行 HTTPS 传输。 您可以选择将私有 SSL 密钥放在我们的中国数据中心,就像在全球 Cloudflare 网络上一样。 在 China Network 上提供灵活、完整和严格的 SSL 选项。

写了这么多关于 CloudFlare,其目的是想说通过 CloudFlareCDN 功能去缓存 GitHub Pages上的内容,这样我就可以走 CloudFlare CDN路线来访问自己的网站了。

早之前就有很多人这么干,并且每天都有人这么干,我是很佩服这些人为了一个小破站,就是死活不备案,然后通过各种手段来使得自己的网站在大陆地区可访问。这样的人还是集中于 IT行业的从业人员,普通人造就乖乖备案了,哪经得起这么折腾。

当然,关于网站备案是不是就不折腾了?这个我之前的文章也有说过,备案也是较为麻烦的事情,麻烦一次大的,完成所有手续后是不是就万事大吉呢?

并不是,首先 工信部会抽查网站,这个工作主要是云服务商自查的情况较多,或许是云服务商怕被上头查到违规和空壳之类的网站,所以阿里腾讯的自查都是较为积极和激进的。

所以你备案时填写的电话不能随意改动,换了手机号要及时去更新备案信息,否则电话两次打不通,就面临撤销备案号的可能性。

说到这里,你就不难理解为何有些人死活都不备案了,或许这群人稍微偏执一些,也是因为他们可以展现自己的技术实力吧。

腾讯云CDN

在用 CloudFlare对接 GitHub Pages之前,我的第一想法是腾讯云境外CDN。去年2019对 CloudFlare稍作了解,发现要 NS方式接入才可如此再次 CNAMEGitHub Pages

尽管也了解到可以通过某些站长做好的 CloudFlare Partner上实现 CNAME接入,不知道怎么地,我并未弄清楚,也没什么需求,因此就没有做过多了解和实践。

所以我以为要想通过 CloudFlare去缓存 GitHub Pages只能是 NS接入,而不能 CNAME接入,才想到腾讯云。想着如果我选择的是境外 CDN,应该是不需要域名备案的,果不其然,一试发现真的可以。于是我就申请了新加坡地区的 对象存储,并且把网站传入此桶中,在设置好 自定义加速域名,测试发现是OK的。

到了第二天的傍晚,我的创宇监控报警了,才发现其他地区的网络访问延迟很高,超过了我设定的阈值。而且整个下来,似乎只对我的手机单纯的用 中国移动数据流量有些提升,其他的网络访问也并无区别,这当然也是在预料之内的事。

到了晚上,才想起来试试 CloudFlare看看,并且于今早上(第三天)实现了 CloudFlareCNAME 接入,结果发现无限301循环。

这废了我一个小时才找到原因,原因就是 CloudFlareGitHub Pages这段 回源没有采用 TLS访问,解决的办法也很简单,在 CloudFlare中找到 SSL/TLS中的 概述,把默认的 灵活(加密浏览器与 Cloudflare 之间的流量)改为 完全(端到端加密,使用服务器上的自签名证书)即可。

去年2019年年底, CloudFlare还没有中文界面,不知道今年什么时候开始有了中文界面,使用起来更方便了。

但使用了 CloudFlare后,再去网站测速那里测速,发现情况也没好多少。之前访问某些网站就是走 CloudFlareCDN,也是时不时的“抽风”,有时候还不能访问。

所以这就是我为何要采用 CNAME接入的原因,要是 NS接入,我不知道 CloudFlareDNS能不能区别国家设置不同的解析,但可以肯定的是无法像国内的 DNS服务商可以设置不同运营商解析线路的。

因此我继续用国内的 DNS服务,或许在 DNS解析所用时间上还有点微弱的优势,同时我可以针对不同运营商路线设置不同解析,尽可能最大化提高此战的加载速度。