不存在的结果也会被缓存
解析器不仅缓存查到的地址,也缓存「这个域名不存在」以及「这个域名没有该类型记录」的结论,缓存时长取自权威区域里起始授权记录的相关字段,常见取值范围是几百到几千秒。这样的机制保护了权威服务器不被反复追问,副作用是新上线或刚修复的记录在一段时间内仍会被部分客户端判为不存在。理解这一点,就能把「一会儿好一会儿不好」的现象归到缓存放行时间上,而不是急着改配置。
基本信息
| 缓存对象 | 域名不存在的响应与某类型记录缺失的响应 |
|---|---|
| 缓存时长 | 取自权威段中起始授权记录的相关字段 |
| 典型范围 | 数百秒到若干千秒不等,取决于区域配置 |
| 清理方式 | 本地解析器清缓存;终端侧刷新解析缓存 |
| 适用场景 | 新域名上线、记录刚修复、环境迁移 |
典型使用场景
- 新域名上线后部分用户访问失败:确认是否仍被负缓存
- 记录修复后仍然不通:判断缓存是否未过期
- 判断修复后多久生效:读负缓存时长字段估算等待时间
- 排查「一会儿好一会儿不好」:区分是缓存差异还是服务不稳定
- 调整区域参数:评估负缓存时长对故障恢复时间的影响
观察负缓存
观察负缓存
dig app.example.com | grep -E 'status|SOA' # 不存在时权威段带起始授权记录
dig app.example.com SOA | tail -5 # 看负缓存时长字段
sudo resolvectl flush-caches # 本地解析器清缓存
ipconfig /flushdns # Windows 终端刷缓存
# 换独立解析器交叉验证记录是否已发布:
dig +short app.example.com @8.8.8.8现象与归因
| 现象 | 可能原因 | 处置 |
|---|---|---|
| 刚上线的域名部分用户失败 | 此前的不存在结果被缓存 | 等待缓存过期或引导刷新 |
| 记录修复后仍无解析 | 负缓存未过期 | 读缓存时长估算生效时间 |
| 同一网络内结果不一致 | 各解析器缓存状态不同 | 逐一查询并对比剩余时长 |
| 清理缓存后立刻恢复 | 确认为缓存问题 | 评估并调整缓存参数 |
| 始终解析不到且权威也没有 | 记录确实未发布 | 核对区域配置与发布流程 |
新域名解析「一会儿好一会儿不好」多为:先返回不存在被缓存,记录上线后各缓存过期时间不一;等待或清缓存即可,不宜乱改解析配置。