实际如何选择 TTL
什么是 DNS TTL?如何选择合适的值
TTL 是 Time To Live(生存时间)的缩写。它是附加在每条 DNS 记录上的一个秒数,回答的是一个问题:解析器在再次询问之前,可以复用这个应答多久?
它是 DNS 中最容易被忽视的设置。大多数人直接接受服务商设置的默认值,直到紧急迁移时才发现它的存在,而那时想有效地修改已经太晚了。
实际如何选择 TTL
权衡取舍
| 高 TTL(86400) | 低 TTL(300) | |
|---|---|---|
| 解析速度 | 更快,通常命中缓存 | 更慢,经常需要重新查询 |
| 查询量 | 低 | 高 |
| 变更生效时间 | 最长 24 小时 | 最长 5 分钟 |
| DNS 故障时的韧性 | 更好,缓存能为您兜底 | 更差,缓存很快过期 |
| 最适合 | 稳定的记录 | 即将变更的记录 |
核心要点
高 TTL 优化的是速度和韧性,低 TTL 优化的是灵活性。没有哪一个是放之四海而皆准的,正确答案取决于这条记录是否即将变更。
TTL 在实际中的样子
example.com. 3600 IN A 93.184.216.34
example.com. 86400 IN NS ns1.example.com.用 dig 查询时,显示的是剩余的 TTL,而不是配置的 TTL。间隔几秒运行两次相同的查询,观察这个数字下降,这就是解析器缓存倒计时的实时视图。
dig +noall +answer example.com
# wait 10 seconds, then
dig +noall +answer example.com按记录类型推荐的值
| 记录 | 建议的 TTL | 原因 |
|---|---|---|
A / AAAA | 3600(1 小时) | 不错的默认值:足够快,能及时纠正错误;也足够长,运行高效。 |
迁移期间的 A | 300(5 分钟) | 提前一天设置,让变更迅速落地。 |
MX | 3600-14400 | 邮件会排队并重试,所以速度没那么重要。 |
TXT(SPF/DKIM/DMARC) | 3600 | 很少变更;变更时速度也足够。 |
NS | 86400 以上 | 委派几乎从不变化,缓存它可以减轻 TLD 的负载。 |
CNAME | 与目标保持一致 | 过期得比它所指向的目标更快,没有任何好处。 |
迁移的标准做法
这是唯一值得牢记的 TTL 工作流程,因为它能把长达一天的中断风险,缩短为五分钟。
在变更之前至少一个旧 TTL 周期,调低 TTL
如果当前的 TTL 是 3600,就把它改为 300,并至少等待一小时,其他一概不动。
确认正在提供的是较短的 TTL
查询该记录,检查 TTL 是否从 300 开始倒计时。此时,所有持有您这条记录的缓存,都已进入五分钟的计时。
进行真正的变更
更新地址。现在任何人最长只需等待五分钟。
验证,然后恢复 TTL
流量切到新服务器之后,把 TTL 调回 3600,以免继续承担查询成本。
TTL 与韧性
高 TTL 有一个很少被提及的好处:如果您的 DNS 服务商发生故障,仍缓存着您记录的解析器会继续提供服务。24 小时的 TTL 可以让您的域名在长达数小时的 DNS 故障中基本无感地撑过去。而 60 秒的 TTL 则意味着几乎立刻就会中断。
这是让稳定记录的 TTL 保持在较高水平的有力理由,也说明低 TTL 应当只作为临时的迁移工具,而不是默认的做法。记录变更时您究竟在等待什么,请参阅 DNS 传播。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
本主题的免费工具
常见问题
相关阅读
“传播”其实只是缓存过期
0 分钟
您保存了更改
0-5 分钟
您的 DNS 托管商完成更新
最长到 TTL
旧答案仍在缓存中
TTL 之后
所有人都看到新答案
没有任何内容被推送出去,只是各个缓存不再复用自己的副本
DNS 传播:为何变更要等这么久,实际发生了什么
没有任何东西在传播。弄清等待期间实际发生的事,就能准确知道要等多久,以及如何缩短。
几乎每个 DNS 区域都会遇到的记录
什么是 DNS A 记录?何时需要 AAAA 记录
真正把您的域名指向服务器的那条记录:它的结构、对应的 AAAA 记录,以及最容易让网站出故障的四个错误。
实际如何选择 TTL
如何刷新 DNS 缓存(Windows、macOS、Linux、浏览器)
每个平台都有可直接复制的命令,还有一个诊断方法,让您在动手之前就知道刷新是否有用。