起因
昨天我写好了一篇文章,准备发布,但是发现网站访问异常的慢,于是上 itdog 慢速测试了一遍,发现全红。于是我尝试去找客服,客服说我没有把域名解析到 cdn,但是我在 cf 上解析了,于是我开始排查原因。
过程
我先登录了 cf 控制台,查看了 dns 记录,发现没问题。我自己在本地电脑上又 ping
了一遍,ping 出的 ip 是 cdn 的,但是我突然想到我 ping 其他 cname 记录的时候都会在命令行看见那个 cname 的地址,为什么唯独我的根域名没显示。顺着这个想,我想到了 cf 的根域名自动 cname 拉平,具体可以看后面。面对这种情况,有两种选择,一个是用 www 的子域名来做网站,因为 cloudflare 只拉平根域名。还有一种方法,也是我采用的,就是把域名 nameserver 切换回 dnspod,成功解决了第一个问题。
但是第一步解决后网站访问还是很慢,我对每个源站进行测试,发现所有香港的服务器好像访问都超时了???由于时间紧迫,我直接关掉了所有不健康源站的回源,只留下了一个国内服务器的。但是这样会导致服务器资源不够了,于是我又买了一个华为云的北京的服务器,这样网站就快多了,而且又一定的负载能力了。
CNAME 拉平
由于 CNAME 跟任何记录都冲突的特性,在根域(@)下添加 CNAME 记录指向 CDN(或其他服务)会导致 mx(邮箱记录)、TXT(一些站长验证)、DS 等常用记录冲突等且多级 CNAME 会导致解析性能下降等问题,所有 cloudflare 在根域名上禁止使用了 cname,如果要添加 cname 记录,cf 会自动把记录拉平。
cname 拉平,也就是 dns 服务商在他们的服务器上获取到 cname 的终点 ip,然后把 cname 记录改成这个 ip。
这样子虽然对大部分场景是有好处的,但是如果是国内的 cdn + cloudflare 就会出现错误。因为 cloudflare 用来拉平的服务器是美国的服务器,所有在国内访问会发现 cdn 没有作用了,所有访问都只会访问一个 ip,那么这个 cdn 就成废物了。
cloudflare 的很大的问题就是无法关闭根域名的 cname 拉平,导致如果用 cloudflare 的 dns 解析,而且要用 cdn 的业务在根域名上面,就必须用 cloudflare 的 cdn,这一点极其的坑。
结果
这次的主要原因是 cf 的 cname 拉平和香港服务器的问题。我到时候有空会重新看一下我的那几个香港的服务器出现了什么问题。
实在不行就重装系统。