一个关于解决“域名未备案”的方案
我们第一个项目面向的是企业用户,所以其中有个功能就是给企业做官网。这些用户虽然是独立的用户,但是平台提供了他们交互功能,也就是说,这些用户在我们平台上的数据也是有关联的。简单的说就是,这些众多企业用户的数据不能独立开。
我们给企业的官网当然是模板化的,客户只要在后台点击几下,稍作配置就可以生成它的官网。默认情况下,我们分配给客户一个子域名。虽然企业官网基本上没有什么人会看,但是客户百分百要求绑定顶级域名。这时候中国特色的备案难题就出现了。
购买域名简单,但是备案就较为麻烦。开始我们认为,这些客户都是正规客户,备个案应该也没啥。于是我们提供了管理后台,只要用户备案完成(当然我们会协助)后,填写好备案信息,提交我们审核后就ok了。但是真实操作后,发现实在是太繁琐了。大部分客户并不关心备案,也不想了解备案,我们沟通也十分麻烦。于是我们就想必须得提供不用备案的方式。
很直接能想到的当然就是把服务器放到国外喽。但是考虑到原来有备案的用户、国内访问速度等问题,直接把数据放国外是不行的,所以最简单的方法就是建立一个国外代理。我的做法是,用户提交他购买的域名,然后我会给他一个cname地址,实际指向为一台国外服务器。而国外服务器上的代理(实际为Nginx)针对每一个域名,都转发到对应的平台子域名。这样的好处是,我们的代码几乎不用改。
不过没过多久,客户就投诉了,说网站老是打不开,要么就很慢。原因很快就找到,因为国外服务器到国内服务器之间的网络不是很稳定,有时候并非高峰期都不稳定,而且疑似有一定的周期性。但是国内网络访问那台国外服务器却异常稳定。总之是个玄学问题,原因估计是众所周知又不太好谈论的那个。怎么办呢?
问题的关键是国外服务器访问国内服务器的网络不稳定,所以只要把这一层去掉就好了。好在我们项目做了前后端分离,稍加修改,我把前端代码放到了国外的服务器,而数据调用直接用跨域的方式,后端只需要加一些支持跨域的头即可。这么一来,问题基本解决了。
不过后来用户还是觉得慢,实际上是真的一点都不满。但是用户是爹,怎么办呢,改呗。因为数据请求实际上已经走了指向国内的域名,所谓的慢,主要在于用户第一次请求前端页面时较大的js、css文件,这种时候就只能上CDN了。改成了如下图所示。
用户第一步请求国外服务器拿到很小的index.html,上面只引用了CDN地址(放到阿里云的CDN上了),第二步就是加载CDN上的文件,然后第三步访问数据。到这里,我已经想不出还能怎么优化了。
ps:这文章其实是一个实验,前端小哥问我怎么不写写技术性的东西,我说技术性的东西反正也没人看,屁话才是有人看的,这篇虽然也并没有什么真正的技术,但是好歹是技术性的文章,所以拿来测试一下,你好,小白鼠
【扫描关注】