首页/网络/协议速查/负缓存(NXDOMAIN/空答案)
DNS 与域名解析60 条

负缓存(NXDOMAIN/空答案)

不存在的域名也会被缓存:解析器按 SOA 相关字段决定负缓存时长,这就是「记录删了却还查得到/新建却查不到」的原因。

协议速查网络更新于 2026-10-13

负缓存是什么

不存在的名字也会被缓存:解析器按一定时长记住失败结果,这就是「记录删了却还查得到」「新建子域却查不到」的原因。规则写在 RFC 2308 中,负缓存的时长由权威区的起始授权记录相关字段决定。

两种失败要分开看

名字不存在与名字存在但没有该类型的记录,是两种不同的结果,缓存语义与时长也可能不同。排查时先看应答里的状态码,再看权威段有没有给出起始授权记录,才能判断这个结论会被缓存多久。

基本信息

名字不存在对应 NXDOMAIN,会被负缓存
无数据名字存在但缺少该类型记录
规范RFC 2308 规定负缓存有效期
时长来源起始授权记录中的最小生存时间与记录生存时间取较小者

典型使用场景

  • 子域刚上线却短时间查不到
  • 删除记录之后解析仍返回旧结论
  • 排查不同解析器结果不一致
  • 规划变更窗口时估算最长生效时间

查看负缓存窗口

查看负缓存窗口
dig example.com SOA +short                                        # 看起始授权记录相关字段
dig @8.8.8.8 nonexist.example.com A +all | grep -i status          # 看状态码
dig nonexist.example.com A +noall +authority                       # 看权威段给出的时间窗口

结果与影响

结果含义影响
名字不存在该名字没有记录会被负缓存,新建同名记录后仍可能查不到
无数据名字存在但缺该类型部分解析器同样会缓存这个结论
解析失败查询过程失败通常不会被长期缓存,会立即重试
正常应答有对应记录按记录自身的生存时间缓存
上线新子域前不要做「先建再删再建」这类操作:负缓存会让新记录在这段时间内查不到,表现成「配置明明正确却不解析」。
起始授权记录里的最小生存时间既参与负缓存时长计算,也常被误当成「没有显式生存时间时的默认值」:不同实现的取值逻辑并不完全一致,看版本说明最稳妥。
排查时优先用与客户端同路径的解析器复现:不同解析器持有的负缓存状态不同,换一个解析器可能完全正常,从而误判为「已经恢复」。

易错点

  • 上线前做删除再新建:负缓存导致新记录在一段时间内不可解析
  • 把起始授权记录里的最小时长当成默认生存时间:不同实现取值逻辑不同,估算往往失真
  • 只看本机解析器结果就判断异常:不同解析器持有的负缓存状态并不相同
  • 认为所有失败结果都会被长期缓存:多数查询失败类结果并不会被缓存
  • 删除记录后立刻期望全网生效:负缓存窗口过短反而会带来额外的查询压力

数据来源与参考

  • RFC 2308(DNS 负缓存)
  • RFC 8020(NXDOMAIN 截断子域)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌