阿里云 ESA + Pages 域名部分电脑无法访问
最近使用阿里云 ESA + Pages 部署了一个网站,绑定的域名是 www.exmaple.com。
部署完成后,发现一个奇怪的问题:其他电脑可以正常打开网站,但我的 Windows 电脑始终无法访问。
起初怀疑是 ESA 配置、Pages 部署或者 HTTPS 证书出了问题。但既然其他电脑可以访问,就说明网站并非完全不可用。
于是从本机 DNS 开始排查。最终发现,域名的新旧权威 DNS 记录不一致。部分公共 DNS 仍返回旧 NS,导致不同电脑出现不同的访问结果。
这篇文章记录整个排查过程、使用的命令和修复思路。
解决方案
1. 检查本机 DNS 解析
首先在 Windows PowerShell 中执行:
powershell
nslookup www.exmaple.com
得到结果:
text
服务器: UnKnown
Address: 10.255.148.69
*** UnKnown 找不到 www.exmaple.com:
Non-existent domain
这里有两个重要信息:
10.255.148.69:当前电脑使用的 DNS 服务器,属于私有 IP 地址。Non-existent domain:DNS 返回 NXDOMAIN,表示该解析器认为域名不存在。
这说明浏览器还没走到 HTTPS 请求阶段,就已经卡在域名解析上。
但此时不能断定域名真的不存在,也可能是本机 DNS 或上游解析器缓存了错误结果。
2. 使用不同公共 DNS 进行对比
为了排除本机 DNS 的影响,分别指定阿里云公共 DNS 和 Cloudflare DNS 查询。
powershell
nslookup www.exmaple.com 223.5.5.5
nslookup www.exmaple.com 1.1.1.1
阿里云公共 DNS 返回:
text
服务器: public1.alidns.com
Address: 223.5.5.5
*** public1.alidns.com 找不到
www.exmaple.com: Non-existent domain
Cloudflare DNS 返回:
text
服务器: one.one.one.one
Address: 1.1.1.1
非权威应答:
名称: www.exmaple.com
Addresses:
120.222.219.13
124.160.144.202
两个公共 DNS 出现了不同结果。
继续使用 Google DNS:
powershell
nslookup www.exmaple.com 8.8.8.8
返回:
text
服务器: dns.google
Address: 8.8.8.8
非权威应答:
名称: www.exmaple.com
Addresses:
117.160.121.67
111.170.29.45
36.158.219.8
111.48.30.45
111.48.33.36
36.158.222.14
整理结果:
| DNS 服务器 | 查询结果 |
|---|---|
本机 DNS 10.255.148.69 |
NXDOMAIN |
阿里云 DNS 223.5.5.5 |
NXDOMAIN |
Cloudflare DNS 1.1.1.1 |
正常返回 IP |
Google DNS 8.8.8.8 |
正常返回 IP |
不同 DNS 服务器返回不同节点 IP,本身未必是问题。ESA 采用边缘节点调度,不同地区、不同 DNS 解析器可能获得不同地址。
真正需要关注的是:部分 DNS 返回 NXDOMAIN,而其他 DNS 能正常解析。
这时,排查重点从 Pages 部署转向 DNS 委派和解析缓存。
3. 绕过 DNS 验证 ESA 是否正常
接下来需要确认:网站本身能不能访问?
使用 curl 的 --resolve 参数,指定之前解析成功的 IP 地址:
powershell
curl.exe -I -v `
--resolve www.exmaple.com:443:120.222.219.13 `
https://www.exmaple.com/
这里使用 PowerShell 的反引号换行,也可以写成一行。
--resolve 的作用是临时指定域名对应的 IP,绕过系统 DNS,同时保留 HTTPS 请求中的域名信息。
关键输出:
text
* Host www.exmaple.com:443 was resolved.
* IPv4: 120.222.219.13
* Trying 120.222.219.13:443...
* Established connection to www.exmaple.com
* Request completely sent off
< HTTP/1.1 200 OK
< Server: ESA
< Content-Type: text/html
< Content-Length: 810
< X-Site-Cache-Status: HIT
可以确认:
- 本机可以连接 ESA 节点的 443 端口。
- HTTPS 握手成功。
- ESA 返回
200 OK。 - 该请求命中了 ESA 缓存。
这表明测试的 ESA 节点能够正常响应请求。
因此,不必急着重新部署 Pages,也没有证据表明需要重置 HTTPS 证书。
需要注意,curl -I 发出的是 HEAD 请求。它能验证 HTTP 响应状态,但不能保证页面中的 JavaScript、CSS 和接口请求都正常。
4. 检查域名 NS 是否一致
既然 ESA 能返回页面,就继续检查 DNS。
执行:
powershell
nslookup -type=NS exmaple.com 1.1.1.1
nslookup -type=NS exmaple.com 223.5.5.5
Cloudflare 返回:
text
exmaple.com nameserver =
rainier.ns.atrustdns.com
exmaple.com nameserver =
red-sea.ns.atrustdns.com
阿里云公共 DNS 返回:
text
exmaple.com nameserver =
dns22.hichina.com
exmaple.com nameserver =
dns21.hichina.com
这就是排查过程中的关键线索。
同一个域名,不同递归 DNS 返回了两组 NS:
| DNS | 返回的 NS |
|---|---|
| Cloudflare | atrustdns.com |
| 阿里云公共 DNS | hichina.com |
这通常意味着域名发生过 DNS 服务迁移,部分递归解析器仍保留旧的委派信息。
但递归 DNS 返回的 NS 不一定代表注册局当前实际委派的 NS。
还需要直接查询 .com 顶级域名服务器。
5. 查询注册局实际委派的 NS
执行:
powershell
nslookup -type=NS exmaple.com a.gtld-servers.net
关键结果:
text
exmaple.com nameserver =
rainier.ns.atrustdns.com
exmaple.com nameserver =
red-sea.ns.atrustdns.com
这一步确认:.com 顶级域名服务器已经将 exmaple.com 委派给 atrustdns.com 的两台 NS。
因此,atrustdns.com 是当前注册局委派的 DNS 服务。
阿里云公共 DNS 返回的 hichina.com 与当前委派不一致。
6. 直接查询新旧权威 DNS
为了验证两组 DNS 的实际记录,分别执行:
powershell
nslookup -type=A www.exmaple.com rainier.ns.atrustdns.com
nslookup -type=A www.exmaple.com dns21.hichina.com
新权威 DNS 返回:
text
服务器: UnKnown
Address: 8.148.39.173
名称: www.exmaple.com
Addresses:
36.158.219.10
111.48.33.36
117.160.121.66
111.48.30.45
36.158.222.14
111.170.29.46
旧 DNS 返回:
text
服务器: UnKnown
Address: 47.118.199.200
*** UnKnown 找不到 www.exmaple.com:
Non-existent domain
至此,可以确定三个事实:
- 注册局已将域名委派给
atrustdns.com。 - 新权威 DNS 存在
www.exmaple.com的 A 记录。 - 旧的
hichina.comDNS 对该域名返回 NXDOMAIN。
同时,阿里云公共 DNS 仍返回旧 NS,并且无法解析 www。
故障集中在 DNS 委派信息和解析结果不一致,而不是这次测试的 ESA HTTPS 链路。
不过,是否由阿里云公共 DNS 的旧委派缓存直接造成 NXDOMAIN,仍需要结合缓存 TTL、完整递归过程或 DNS 服务商日志确认。
7. 临时恢复本机访问
如果只是想让故障电脑先打开网站,可以使用两种方法。
方法一:更换 DNS
如果电脑处于普通家庭网络,可以尝试将网卡 DNS 设置为:
text
首选 DNS:1.1.1.1
备用 DNS:8.8.8.8
Windows 操作路径:
- 打开「设置」。
- 进入「网络和 Internet」。
- 找到当前使用的 Wi-Fi 或以太网。
- 打开 DNS 服务器分配设置。
- 改为手动 IPv4 DNS。
- 填入上述地址并保存。
随后在 PowerShell 中执行:
powershell
ipconfig /flushdns
再检查:
powershell
nslookup www.exmaple.com
如果 DNS 正常返回 IP,再打开浏览器测试。
注意:如果电脑连接公司网络、VPN 或内部 DNS,修改网卡 DNS 可能影响内部系统访问。此时应先确认 10.255.148.69 的来源。
方法二:临时修改 hosts
如果不希望修改 DNS 服务器,也可以临时为该域名指定一个已经验证可用的 ESA IP。
以管理员身份运行记事本,打开:
text
C:\Windows\System32\drivers\etc\hosts
在文件末尾添加:
text
120.222.219.13 www.exmaple.com
保存文件。
然后执行:
powershell
ipconfig /flushdns
重新打开浏览器,访问:
text
https://www.exmaple.com
需要注意:
- hosts 文件只能绕过系统 DNS,不能修复公网 DNS。
nslookup通常直接查询 DNS,不用于验证 hosts 是否生效。- ESA 节点 IP 可能随调度策略变化。
- 测试结束后应删除这条 hosts 记录。
这只能作为临时处理手段,不适合作为长期配置。
8. 从根本上修复 DNS
正式修复需要确保域名注册局、当前权威 DNS 和递归解析器看到一致的结果。
第一步:核对域名注册商 NS
确认域名当前使用:
text
rainier.ns.atrustdns.com
red-sea.ns.atrustdns.com
具体值应以当前 ESA 控制台分配的 NS 和注册局实际委派为准。
不要在没有确认之前反复切换 NS。
第二步:检查 ESA DNS 记录
进入阿里云 ESA 控制台,打开对应站点的 DNS 记录管理。
确认:
www记录存在。- Pages 项目已经绑定
www.exmaple.com。 - 没有指向旧服务的错误记录。
- 站点接入状态正常。
记录类型及目标值应以 ESA Pages 当前给出的域名绑定要求为准,不要将前面查询到的边缘节点 IP 直接填成固定 A 记录。
第三步:检查 DNS 缓存与传播
如果最近刚切换 NS,可以观察递归 DNS 是否逐步更新。
继续执行:
powershell
nslookup -type=NS exmaple.com 223.5.5.5
nslookup www.exmaple.com 223.5.5.5
nslookup -type=NS exmaple.com 223.6.6.6
nslookup www.exmaple.com 223.6.6.6
当解析器不再返回旧 NS,且能够获得正确的解析结果时,再重新测试网站。
如果 NS 切换已经过去数天,部分公共 DNS 仍持续返回旧记录或 NXDOMAIN,就应该联系对应 DNS 服务商,提交完整查询结果,检查缓存和解析策略。
排查命令汇总
下面是本次用到的核心命令,可以保存备用。
powershell
# 1. 检查本机 DNS
nslookup www.exmaple.com
# 2. 检查公共 DNS
nslookup www.exmaple.com 223.5.5.5
nslookup www.exmaple.com 1.1.1.1
nslookup www.exmaple.com 8.8.8.8
# 3. 查询不同递归 DNS 返回的 NS
nslookup -type=NS exmaple.com 1.1.1.1
nslookup -type=NS exmaple.com 223.5.5.5
# 4. 查询注册局委派
nslookup -type=NS exmaple.com a.gtld-servers.net
# 5. 查询当前权威 DNS
nslookup -type=A www.exmaple.com rainier.ns.atrustdns.com
# 6. 查询旧 DNS
nslookup -type=A www.exmaple.com dns21.hichina.com
# 7. 清理本机 DNS 缓存
ipconfig /flushdns
# 8. 绕过 DNS 验证 ESA HTTPS
curl.exe -I -v --resolve www.exmaple.com:443:120.222.219.13 https://www.exmaple.com/