双语
双语

杂言(可以略过的文字)

一般技术性文章都是发表在英文博客的,一来是可以练英文,而来中文博客内容偏文艺,太多技术性也有违主题。然而本文写英文,应该不会有太多人看的,因为需要设置中英双语的老外还是凤毛麟角的。所以本文的主体对象还是说中文的。于是就有了本文。

TL;DR

有两种方案可以使网站在国内国外访问速度达到最优:

  1. 域名备案,服务器在国内,CDN配置海外节点
  2. 无法备案域名,服务器架设在国内,通过设置DNS将中文子域指向国内的服务器

前言

双语网站面向不同人群,大多数情况是国籍不同。由于众所周知的原因,中英双语的网站是很难保证速度的。经常是国内访问速度快,海外访问就慢;海外访问快,国内访问就慢。总是鱼与熊掌不可兼得。要论搭建双语网站的难度之最,应该非中英双语莫属。

起先本博客是搭建在Github Pages, 使用CloudFlare作为DNS和CDN的平台。但发现国外访问速度不错,但国内速度只能呵呵了。但CloudFlare是提供中国节点的啊……至少官网上是这个说的。一查才知,原来中国节点是面向大客户计划的,并且需要备案。如果我要有备案,谁还用CloudFlare,看来此路不通。经过研究(Google搜索)发现影响网站访问速度的主要有两大因素,一是网站域名解析的速度,其次是网站服务器的访问速度。

网站服务器的速度不敢恭维,因为Github已经被墙。但由于CloudFlare的CDN,网站还是可以访问的。但一查DNS的route,速度不敢恭维。后来才知道CloudFlare的域名解析国内访问也是各种不稳定。

于是就想,那把中文博客放到国内服务器,并使用国内的域名解析服务;英文博客所有配置不变,仍用CloudFlare的DNS和CDN(不用CloudFlare的DNS就无法使用其CDN)。

说做就做。

实现

如前文提到,一种极简的方案就是把网站的所有内容都放在国内,再通过配置DNS,这样海外的访问也不太差。但唯一的不足就是需要审核,否则网站搭建寸步难行。对于身在海外无法获得幕布的童靴,也是情何以堪。

其实大多数情况,中文网站是面向国内用户,希望国内访问速度能快些;而英文网站是面向海外用户,所以国内的访问速度不那么重要,主要是海外用户能够快速打开。于是乎就想到,为何不将中英文网站彻底分离,建立在不同的主机上,使用不同的域名解析服务器。于是就有了第二套方案,也是本文讲的重点。

对于静态博客, 将主机分离是比较简单的,只需将文件拷贝过去即可。本博客选用Coding Page作为主机,一是迁移Git repo简单,二是免费……

但对于子域名解析的分离,似乎不那么直观。本博客域名abnerchou.me下有两个子域,cn.abnerchou.me和en.abnerchou.me分别对应中文博客和英文博客。en的子域仍然使用CloudFlare,因为其CDN在海外还是很出色的。于是cn的子域在经过千挑万选百度搜索后,决定使用DNSPod来解析。

别被这段文字唬住了,其实完全可以配置多个DNS的。将图中的NS服务器加入域名服务商的自定义DNS中。

然后为了让DNSPod来处理cn子域,在CloudFlare加入两条NS记录:

Type Name Value TTL
NS cn f1g1ns1.dnspod.net Auto
NS cn f1g1ns2.dnspod.net Auto

这样cn的子域就从Cloudflare分离出来,Cloudflare在接到所有cn子域的请求都会自动转到DNSPod上去。

同理,对于www, en等子域,我们也要在DNSPod上设置其转到CloudFlare上。

测试

IP地址:

IP
IP

明显两个子域已经指向不同的IP地址了。而且从Ping值上也可看出地域的区别。

速度 (使用360测速):

cn.abnerchou.me

360
360

en.abnerchou.me

360
360

已经不用说什么了,en子域完全无法解析,更不用提速度差距了。

相关

文中使用到的网络免费服务:

本博客搭建结构:

  • 域名:NameCheap
  • DNS:DNSPod CloudFlare
  • CDN:CloudFlare(海外)
  • Hosting:Github(海外)Coding(国内)
  • Integration:Travis-Ci(海外)Coding IDE(国内)

后记

理论实践都很简单,只是希望记录下来供有需要的童鞋参考。

现在想想,不明白为什么自己弄双语博客, 只能说是自找麻烦,瞎折腾。但也就这么折腾着,反而把DNS的原理看得更明白了。无非就是些路标性的指令,将网络中的请求引导到正确的IP上,仅此而已。