DNS TTL 值理解及配置

引言

我们有配置域名时,不同情况下,不同业务下,需要增大或减小 DNS TTL 值。这是为什么呢? 这需要我们重新理解下 DNS TTL 值的含义。

什么是域名的 TTL 值

TTL(Time-To-Live),就是一条域名解析记录在 DNS 服务器中的存留时间。
当各地的 DNS 服务器接受到解析请求时,就会向域名指定的 NS 服务器发出解析请求从而获得解析记录;
在获得这个记录之后,记录会在 DNS 服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,
DNS 服务器将不再向 NS 服务器发出请求,而是直接返回刚才获得的记录;
而这个记录在 DNS 服务器上保留的时间,就是 TTL 值。

TTL 值设置的应用

1. 增大 TTL 值,以节约域名解析时间,给网站访问加速

一般情况下,域名的各种记录是极少更改的,很可能几个月、几年内都不会有什么变化。
我们完全可以增大域名记录的 TTL 值让记录在各地 DNS 服务器中缓存的时间加长,
这样在更长的一段时间内,我们访问这个网站时,本地 ISP 的 DNS 服务器就不需要向域名的 NS 服务器发出解析请求,
而直接从缓存中返回域名解析记录。

国内和国际上很多平台的 TTL 值都是以秒为单位的,很多的默认值都是 3600,也就是默认缓存 1 小时,
这个值实在有点小了,难道会有人一个小时就改一次域名记录吗?
您可以根据自己的需要把这个值适当的扩大,例如要缓存一天就设置成 86400。
Godaddy 的 TTL 设置比较直观,但总共只有 5 个值可以选定,即使切换到高级设置模式也是如此,有点死板了。
网站赢利环境所迫,LifeTyper.com 的 TTL 值是设置成了最大值 1 周,
设置成更大的值可能会有写不必要的麻烦,例如当您要更换空间时,这些旧的记录要很久才过期并被更新。

2. 减小 TTL 值,以减少更换空间或域名更改时的不可访问时间

更换空间 99.9% 会有 DNS 记录更改的问题,因为缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效。
结果就是有的人可能访问到了新服务器,有的人访问到了旧服务器。仅仅是访问的话,这也不是什么大问题,但如果涉及到了邮件发送,
这个就有点麻烦了,说不定哪封重要信件就被发送到了那已经停掉的旧服务器上。

为了尽可能的减小这个各地的解析时间差,合理的做法是:

1)先查看域名当前的 TTL 值,我们假定是 1 天。
2)修改 TTL 值为可设定的最小值,可能的话,建议为 1 分钟,就是 60。
3)等待一天,保证各地的 DNS 服务器缓存都过期并更新了记录。
4)设置修改新记录,这个时候各地的 DNS 就能以最快的速度更新到新的记录。
5)确认各地的 DNS 已经更新完成后,把 TTL 值设置成您想要的值,TTL=60 还是太小了点。

上面配置的前提:

记住,这一切都能起作用的前提,是那些 DNS 服务器完全遵守这些标准和规范,
否则 NS 服务器上怎么设置 TTL 都是白搭,但目前来看还没发现这么不讲规矩的 DNS 服务器。

问题是,没有真正意义上的高速 NS 和 DNS 服务器。就像这里提到的,Godaddy 在国外评测拿到最高分,而在国内使用时速度比万网快不了多少;
万网在国内速度表现突出,在国外的评测网站中得分却可能很低。
如果您有钱像 Google、微软那样在全世界部署大量的 CDN 加速服务器和 NS 服务器,那当然没问题,
问题是这对绝大部分网站来说都不可能,国内国外不是不可兼得,而是很难。

也许有人以为可以通过给域名指定两个 NS 记录(一个国内一个国外)来提高解析速度,但这也是不可能的,
因为只有在 DNS 服务器从第一个 NS 服务器那里获取记录失败时才会向第二个 NS 服务器发送解析请求。
我所知道的一个最廉价和有效的提速方法,就是修改刚才上面说的域名记录的 TTL 值。

Ref

TTL 值设置