域名连接后站点时而能开时而不能:7 个真实原因 + 强制刷新所有 resolver

新主机绑域名后刷一下打开、刷一下报 Domain not configured 或停放页。本文讲半过渡时 DNS 层到底发生了什么,以及怎么强制每个 resolver 都切到新记录。

你昨天把域名连到新主机。刷新——站打开。再刷新——主机的 Domain not configured / Invalid Configuration 页,或者注册商的停放页(parking page)。再刷新——又通了。朋友在另一个 ISP 完全打不开;另一个说没问题。这就是典型的半过渡 DNS 状态:部分 resolver 返回新记录、部分还返回缓存里的旧记录,在所有缓存过期之前,每个访客看到什么基本是抛硬币。

最快的修复(多数情况): 删掉所有残留的 A/AAAA/CNAME,只留新目标;确认注册商的 nameserver 真的指向你正在编辑的那个 DNS 区;然后用 Google 的刷新工具Cloudflare 的清除工具 强制几个大公共 resolver 刷新。剩下的就是等原 TTL 过期。

本文讲 DNS 层到底发生了什么、怎么判断你属于哪一类、以及怎么加速过渡。

你属于哪一类?

先跑这一条诊断,免得修错地方:

for dns in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
  echo -n "$dns: "
  dig @$dns +short yourdomain.com
done
你看到的现象最可能的原因跳到
同一个 resolver 一次返回两个 IP区里有重复/残留 A 记录原因 1
不同 resolver 返回不同的单个 IP,其中一个是旧的传播不均 / 旧 TTL 高原因 3、4
其中一个 IP 是注册商/主机的默认页 IP老主机仍占着域名,或有隐藏停放记录原因 2、7
dig ns yourdomain.com 显示两套不同的 NSnameserver 委派不一致原因 5
IPv4 正常,但 dig AAAA 返回旧 IP残留 AAAA 记录原因 6

常见原因

按命中率从高到低。

1. 多条 A 记录都在

加了新 A 但从没删旧的。Resolver 对同一个名字收到两条 A,挑一条(通常轮询),于是大约一半请求打到死掉的主机。一个常见变体:某些注册商在你加第一条时会自动再建一条 A(常是 apex 或 www),于是你没手敲也产生了冲突。

怎么判断:

dig yourdomain.com

如果 ;; ANSWER SECTION: 列出两条或更多指向不同 IP 的 A,就是这条。

2. 老主机仍绑着域名

老主机还认为域名”挂着”,它的 IP 被命中时就服务它的默认 404/占位页。即使你改了 DNS,对任何还缓存着旧 IP 的 resolver,它都还在应答。

怎么判断: 打开老主机控制台,看域名是否仍列在它的 domains/sites 下。应该已移除或释放。

3. CDN / 公共 resolver 跨数据中心缓存不均

大型 resolver(Google 8.8.8.8、Cloudflare 1.1.1.1)有很多接入点,不会在同一瞬间让缓存过期。比如 Cloudflare 1.1.1.1 对一条记录最多缓存 3 小时(若记录 TTL 短于此则按 TTL,截至 2026 年 6 月)。一个数据中心可能还握着旧答案,另一个已经返回新的了。

怎么判断:

dig @8.8.8.8 yourdomain.com
dig @1.1.1.1 yourdomain.com
dig @208.67.222.222 yourdomain.com

不同 resolver 返回不同 IP = 传播不均。注意:如果新主机用 Anycast(Vercel、Cloudflare Pages、Netlify 都是),同一个主机名各地合法地解析到同一个对外 IP——所以用这些主机时,“所有 resolver 都返回同一个稳定 IP” 才是完成态,而不是出现多个 IP。

4. 老记录 TTL 高

TTL 为 86400(24 小时)的记录,会让每个 resolver 在你改后最长缓存整整一天。这个缓存在你改动时就已经在跑了,所以没法事后把它缩短。

怎么判断: 看 resolver 当前发出的 TTL。dig 答案里的数字是倒计时——如果你间隔 10 秒查两次、它减了约 10,说明你被一个陈旧缓存服务,它要到归零才会刷新:

dig +noall +answer +ttlunits @8.8.8.8 yourdomain.com

5. nameserver 委派不一致

这是最容易被漏掉的原因。注册商说域名委派给了一套 nameserver,但你实际在另一个提供商的 DNS 区里编辑(或者域名同时还挂着注册商默认 nameserver)。Resolver 可能跟随任一套委派,于是有的拿到你的新记录、有的拿到空区或旧区。现象和传播一模一样,但靠它自己永远不会好。

怎么判断:

dig ns yourdomain.com +short

返回的 nameserver 必须和注册商 “Nameservers” 里显示的完全一致。如果看到两套不同的,或注册商列的 nameserver 跟你正在编辑的区对不上,就去注册商那里修委派。

6. AAAA(IPv6)记录指向别处

A 记录对了,但旧的 AAAA(IPv6)还指向老主机。偏好 IPv6 的访客(多数现代移动运营商)会打到死主机,其余人都正常。

怎么判断:

dig AAAA yourdomain.com +short

应为空或指向新主机。重点:截至 2026 年 6 月,Vercel 不支持第三方自定义域名的 IPv6——如果你在 Vercel 上,任何 AAAA 记录都会让 IPv6 用户访问失败,所以直接全删。

7. 注册商隐藏的停放/预设 A 记录(新域名)

全新域名经常自带一条注册商停放页 A 记录(有时还有通配),它在基础区编辑器里看不到。现象就是教科书式间歇:有时打到你的主机,有时打到一张 “this domain is parked” 页。

怎么判断: 在注册商界面找 “default”/“parking”/“forwarding” 开关,再跑下面的全球检查。如果某个地区返回了你从没设过的 IP,就有隐藏记录在作怪。

最短修复路径

第 1 步:先确认 nameserver 委派

dig ns yourdomain.com +short

如果这跟注册商的 nameserver 列表对不上,先在注册商那里修好再碰别的——否则任何记录改动都不会生效。

第 2 步:清掉所有残留记录

在你掌控的 DNS 区里:

  • 删旧 A 记录,只留新目标 IP。
  • 删任何指向老主机的 CNAME
  • 删指向老主机的 AAAA(在 Vercel 上直接把 AAAA 全删)。
  • 关掉注册商的 “parking”、“forwarding” 或 “domain default” 开关。

第 3 步:让老主机释放域名

在老主机控制台里移除或”释放”域名,让它别再应答。否则它会继续给任何还缓存旧 IP 的人服务默认页。

第 4 步:强制刷新主要公共 resolver

可以不等就把大 resolver 从陈旧记录上踢下来:

  • Google Public DNS(8.8.8.8 / 8.8.4.4):dns.google/cache —— 输域名、选 RR 类型(AAAAACNAME)、过验证码、刷新。
  • Cloudflare 1.1.1.1one.one.one.one/purge-cache —— 输域名和记录类型,清除。

这清不掉你 ISP 的 resolver 或单台设备,但能清掉多数检查工具(和多数用户)打到的那两个 resolver。

第 5 步:等原 TTL 过期

对清不掉的缓存,没有捷径——它们只会在 TTL 过期时刷新。旧 TTL 是 86400 的话,从你改记录那刻起最多预留 24 小时。

第 6 步:先全球验证,再清本地

先用全球工具看 30+ 个地点,再清自己机器:

  • dnschecker.orgwhatsmydns.net → 输域名 → 每个地区都应显示新 IP。
  • 确认全球都绿之后再清本地缓存:
    • macOS:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
    • Windows(管理员命令行):ipconfig /flushdns

怎么确认真的修好了

以下全部成立才算完:

  1. dig ns yourdomain.com +short 与注册商完全一致。
  2. “你属于哪一类?“里那段循环从每个 resolver 都返回同一个新 IP。
  3. whatsmydns.net 每个地区都显示新 IP,没有掉队的。
  4. 新主机控制台报域名为 Valid Configuration(不再有 Invalid Configuration / Domain not configured 横幅)。
  5. 一台在不同网络上的真实设备(手机蜂窝,或 VPN 到另一个国家)反复硬刷都能加载到新站。

哪些情况确实不是你操作错了

DNS 传播天生异步。从你改动到原 TTL 过期之间的几小时里,一些间歇不可避免——没有”这个 ISP 的 resolver 还没让缓存过期”的技术解。如果第 1-3 步都干净、全球工具大体都绿,那就是在等。

容易误判的情况

硬刷浏览器没用,因为问题在上游 DNS,不在浏览器或本地缓存。确认全球传播完成后再清本地 DNS——清太早只会把你最近 resolver 还握着的旧答案重新拉回来。

预防建议(下次)

  • 切换至少 24 小时把记录 TTL 降到 300 秒,这样切换时全球缓存已经是短命的。
  • 改 DNS 之前先释放老主机绑定,而不是之后。
  • 加新记录前先删掉所有残留的 A/AAAA/CNAME
  • 动手前先确认注册商 nameserver 跟你编辑的区一致。
  • 改完后等 TTL 时长再宣布”坏了”。
  • dig @8.8.8.8 绕开自己的本地缓存测试。

FAQ

  • 完整传播多久? 标准记录改动(ACNAMETXT)在 TTL 合理时通常 30 分钟到几小时内在主流 resolver 稳定;旧 TTL 高的话能跑满 24 小时,偶尔 48。nameserver 改动可能要 24-48 小时(据 Vercel 文档,2026 年 6 月)。
  • 能提前强制 resolver 刷新吗? 部分能。你能自己刷新两个最大的公共 resolver——Google 在 dns.google/cache、Cloudflare 在 one.one.one.one/purge-cache——但你刷不了任意 ISP 的 resolver 或别人的设备,那些只能按自己的 TTL 过期。
  • 为什么 dig 看着对、站却还在闪? 你很可能查的是已经刷新过的 resolver,而失败的请求打到了还没刷新的那个。多查几个 resolver(上面那段循环),看 TTL 倒计时找出陈旧那个。
  • 我的主机从每个 resolver 都返回 Vercel/Netlify 的 Anycast IP,为什么还间歇? 稳定的 Anycast IP 是对的。如果还闪,原因通常是残留的 AAAA 记录(原因 6),或者缺/重记录导致的 Invalid Configuration 横幅,而不是传播。
  • 要不要现在就把 TTL 降下来修这个问题? 现在降 TTL 只会让以后的改动更快——今天卡你的那份缓存是用旧 TTL 设的,在它过期前会无视新值。

相关阅读

标签: #域名 #DNS #SSL #排查 #间歇性故障 #DNS 传播