DNS 负缓存是指 DNS(域名系统)解析器在查询到不存在的域名记录时,把这个”不存在”的结果也缓存一段时间的行为。很多人以为 DNS 只缓存存在的记录,但实际上不存在的响应也会被缓存,这就是负缓存。它的作用是避免对同一个不存在的域名反复发起查询,减少不必要的上游请求。
定义
在DNS解析过程中,当查询的域名不存在时,权威服务器会返回 NXDOMAIN(域名不存在)响应。递归解析器收到这个响应后,不仅把结果返回给客户端,还会按响应中的 TTL(生存时间)值缓存这个”不存在”的结果。在负缓存有效期内,如果再次查询同一个不存在的域名,解析器直接从缓存返回 NXDOMAIN,不再向上游发起请求。
负缓存的工作机制
负缓存的 TTL 来自 SOA(起始授权机构)记录中的 MINIMUM 字段。权威服务器在返回 NXDOMAIN 时,会在响应的权威段附带 SOA 记录,其中的 MINIMUM 值告诉解析器这个”不存在”的结果应该缓存多久。这个机制由 RFC 2308 定义,现代 DNS 解析器都支持负缓存,但不同解析器对 TTL 的处理细节可能略有差异。有些解析器会限制最大负缓存时长,即使权威服务器返回很长的 TTL 也会被截断到一个上限值,以防止过长的负缓存导致新域名长期无法生效。
负缓存和正缓存在存储和过期机制上本质相同,都受 TTL 控制。区别在于正缓存的是存在的记录(如 A 记录、CNAME 记录),负缓存的是不存在的判定(如 NXDOMAIN 或 NODATA)。两者共享解析器的缓存空间,当缓存空间不足时,正缓存和负缓存都可能被淘汰。对于运行在 Linux(开源操作系统)上的本地解析器,可以通过配置控制缓存大小和负缓存的最大 TTL 上限。

- NXDOMAIN:明确表示域名不存在,会被负缓存。
- NODATA:域名存在但请求的记录类型不存在,也会被负缓存。
- SERVFAIL:服务器临时故障,通常不会被长期缓存。
应用场景与影响
负缓存的好处是减少无效查询。如果某个域名频繁被查询但确实不存在,负缓存可以避免每次都向上游发起请求,降低权威服务器的负载和网络开销。对于 CDN(内容分发网络)场景下的域名预解析、健康检查失败后的重试,负缓存可以防止查询风暴。
但负缓存也有风险。如果域名之前不存在但后来新建了,在负缓存 TTL 过期前,客户端无法解析到新记录。对于刚注册的新域名或刚添加的新子域名,负缓存可能导致一段时间内无法访问。这与域名与网站基础配置中的解析生效时间直接相关。
常见误区
第一种误区是认为 DNS 只缓存存在的记录。实际上 NXDOMAIN 和 NODATA 都会被负缓存,只是 TTL 来源不同。第二种误区是把负缓存 TTL 设得过长。如果 SOA MINIMUM 设为几小时,新建子域名后需要等负缓存过期才能生效,影响业务上线速度。第三种误区是忽视公共 DNS 的负缓存。即使本地清除了缓存,用户的公共 DNS 可能仍然缓存着旧的 NXDOMAIN 结果,需要等待 TTL 过期。第四种误区是在排障时只检查正向解析,忽略负缓存导致的解析延迟。当新域名无法解析时,应先确认是否存在负缓存而非直接怀疑 DNS 配置错误。
负缓存 TTL 的合理设置
SOA 记录中的 MINIMUM 值决定负缓存时长。RFC 2308 建议负缓存 TTL 不超过 3 小时(10800 秒)。常见的设置是 300 到 3600 秒。设得太长会导致新域名延迟生效,设得太短会减弱负缓存的保护效果。在实际运维中,选择合适的负缓存 TTL 需要考虑域名变更频率和解析器用户量。对于用户量大、域名变更少的环境,可以设长一些以最大化减少无效查询;对于域名频繁增删的测试环境或开发环境,应该设短一些以避免新域名延迟生效影响开发效率。同时要考虑 DNSSEC(DNS 安全扩展)签名和负缓存的交互:启用 DNSSEC 后,负缓存响应会附带 NSEC 或 NSEC3 记录证明域名确实不存在,增加了响应体积但提高了安全性。
| MINIMUM 值 | 负缓存时长 | 适用场景 |
|---|---|---|
| 300 秒 | 5 分钟 | 频繁增删子域名的环境 |
| 3600 秒 | 1 小时 | 常规生产环境 |
| 10800 秒 | 3 小时 | 域名结构稳定的环境 |

排查负缓存问题
当新域名无法解析时,首先要排查是否被负缓存了。用 dig domain.com 查看返回的 TTL,如果显示 AUTHORITY 段中的 SOA MINIMUM 值远大于零,说明解析器正在返回负缓存结果。解决方法是等待 TTL 过期,或清除本地解析器缓存。对于 Linux(开源操作系统)服务器,用 systemd-resolve --flush-caches 或 nscd -i hosts 清除本地缓存。对于 WordPress站点的 DNS 变更,要考虑 CDN 和公共 DNS 的负缓存延迟,不要只看本地解析结果。
参考资料
- RFC 2308:Negative Caching of DNS Queries,定义负缓存机制和 SOA MINIMUM 语义。
- RFC 1034:Domain Names – Concepts,DNS 基础概念和解析流程。
- RFC 1035:Domain Names – Implementation,DNS 协议实现规范。
总结
DNS 负缓存是把”域名不存在”的响应也缓存一段时间的机制,TTL 由 SOA 记录的 MINIMUM 值决定。它减少了无效查询,但也可能导致新域名延迟生效。排查时检查 SOA MINIMUM 值和解析器缓存状态,必要时清除缓存。合理设置负缓存 TTL 需要在减少无效查询和快速生效之间平衡,常规生产环境建议 300 到 3600 秒。运维团队应将负缓存 TTL 纳入域名变更流程,确保新域名上线前已考虑到解析生效延迟。

微信扫一扫打赏
支付宝扫一扫打赏