文章
域名没错,是网络记错了
约 1113 字 · 阅读约 3 分钟
建站记录 · 本文有 AI 参与整理,文中的操作与环境对应写作当时的版本。
#现象
手机访问 king0flight.com,看到的是 GitHub Pages 的 404:
There isn't a GitHub Pages site here.
同一台手机、同一个网络,访问 www.king0flight.com 却是新站。电脑上也正常。
第一反应是"域名解析还没生效"。但域名迁移已经过去一段时间了。
#先排除掉的可能性
按顺序查了一遍:
- Cloudflare 的 DNS 记录:
@和www都正确 CNAME 到king0flight.pages.dev,开了代理 - 自定义域状态:两个域名都是 active,证书已签发
- 页面内容:直接用 IP 和
pages.dev地址取,都是新站 - 移动端 UA:服务端没有做任何 UA 判断
- HTTP 到 HTTPS 跳转:正常
服务端看起来没有问题。那就说明,手机拿到的地址就不对。
#关键的一条命令
正常查解析是这样:
nslookup king0flight.com 223.5.5.5
返回的是 Cloudflare 的地址,正确。
但真正说明问题的是这一条——直接去问华为云的域名服务器:
nslookup king0flight.com ns1.huaweicloud-dns.com
返回的是:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
这是 GitHub Pages 的四个 IP。
也就是说:域名已经托管到 Cloudflare,但华为云那边还有一个没删掉的旧解析区域,依然在对外回答,而且回答的是迁移之前的内容。谁问它,它就给旧地址。
#为什么只有部分设备中招
两层原因叠在一起:
- 旧区域还在(主因):华为云的云解析里那个
king0flight.com没有删除 - NS 委派有缓存:改 NS 之后,各级解析器对委派关系的缓存最长 48 小时。这段时间里,一部分网络仍然会去问华为云
所以会出现"同一个域名,不同网络看到不同网站"这种看起来很不讲理的现象。
#处理
- 在华为云删掉旧区域。删完再查
nslookup ... ns1.huaweicloud-dns.com,返回变成Query refused,说明它不再乱答了 - 本地或运营商 DNS 缓存:换 DNS(223.5.5.5 / 1.1.1.1)、换网络,或者等它过期
- 清浏览器缓存、开无痕模式没有用——这是 DNS 层的问题,不是浏览器的问题
#一条判断口诀
用公共 DNS 查,返回 Cloudflare 的地址,就说明域名和服务端都没问题;这时候所有异常都出在"当前这条网络的缓存"上。
这句话后来省了我很多时间。以前遇到"网站打不开",我会从服务器一路查到代码;现在先分清是"服务端答错了"还是"有人替它答了"。
留言
评论区还没开。想聊两句的话,写封信给我,可以直接交流。