子域名解析后访问失败,多数情况逃不出三层:DNS解析没生效、Web服务器没绑定子域名、安全组或防火墙拦了端口,按“解析层→服务器层→网络层”顺序排查,基本能在几分钟内定位。
先分清“解析失败”和“解析成功但访问失败”
不同浏览器提示对应不同故障点,先对号入座:
- 浏览器直接报“无法找到服务器IP地址”“DNS_PROBE_FINISHED_NXDOMAIN”大概率是解析层没有生效。
- 浏览器一直转圈,最后提示“连接超时”或“拒绝连接”解析已经生效,但服务器端口不通或服务没起。
- 打开后出现默认页、404、403解析和端口都通,但Web服务器没认这个子域名。
公司内网或本机情况下,DNS缓存也会捣乱,新解析的子域名在本地可能被旧缓存压住,Windows执行 ipconfig /flushdns,Mac执行 sudo dscacheutil -flushcache 后再测。
子域名解析了但打不开?先确认DNS解析是否真正生效
解析记录添加后,不代表全球立刻生效,要确认本地递归DNS有没有拿到新记录。
具体操作步骤:
- 打开命令行,输入
nslookup blog.example.com或dig +short blog.example.com,把域名换成你的真实子域名。 - 查看返回结果:如果出现
NXDOMAIN或SERVFAIL,说明权威DNS或递归DNS没有这条记录。 - 再和公共DNS做对比:
nslookup blog.example.com 223.5.5.5,这是阿里公共DNS;也可以用8.8.8。 - 如果公共DNS能返回IP,本地返回不了,清本地DNS缓存或等TTL过期,国内服务器常见的默认TTL是600秒,等待时间多数不超过10分钟。
解析记录类型也经常填错,两类最常用的记录如下:
| 记录类型 | 使用场景 | 记录值填写 |
|---|---|---|
| A记录 | 子域名直接指向服务器IPv4 | 填写服务器公网IP |
| CNAME记录 | 子域名指向另一个域名,如CDN、云WAF | 填写目标域名,不能填IP |
行业共识认为,相当一部分二级域名解析失败并非服务器故障,而是解析记录里的主机记录没写对,比如想解析
blog.example.com,在简米云、酷番云这类平台添加记录时,主机记录只填 blog 就行,填成 blog.example.com 会被系统再补一次主域名,变成 blog.example.com.example.com,自然无法生效。
服务器设置子域名后无法访问,多半是Web服务器没认这个域名
解析通了,IP也能ping通,但浏览器打开是默认页面、404或证书错误,问题基本在Web服务器。
先测服务器本机能不能识别这个子域名:
curl -I -H "Host: blog.example.com" http://127.0.0.1
如果返回的不是你配置的站点内容,说明Nginx或Apache没正确匹配server_name。
Nginx的匹配逻辑是:客户端请求带Host头,Nginx拿这个头去和每个server块的server_name对比,找不到精确匹配时,会用第一个server块作为默认主机,所以子域名配置了但没生效,常见原因就是默认server块抢了请求。
一个能用的Nginx子域名配置长这样:
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html index.php;
}
改完配置后别只保存,要测试并重载:
nginx -t systemctl reload nginx
如果用Apache,对应的 <VirtualHost> 里 ServerName 和 ServerAlias 要写全,和Nginx的server_name是一个道理。
国内用宝塔面板或LNMP一键包的用户比较多,面板生成的配置文件通常会自动处理server_name,但手动改过配置文件后容易和面板逻辑冲突,出现访问异常时,先回到面板里确认子域名站点是否存在,再检查手动修改的配置是否被面板覆盖。
二级域名解析失败怎么排查:端口、防火墙与安全组的“最后一公里”
有些时候,解析和Web配置都对,但浏览器还是转圈超时,这时候要查网络层。
云服务器有两层防火墙:安全组和系统防火墙,国内云厂商默认安全组不一定放行80和443端口,很多用户只在系统里放行,忘了云控制台的安全组入方向规则。
按顺序查:
- 在服务器上执行
ss -lntp | grep ':80',看Nginx有没有监听80端口。
- 如果监听了,再从本地电脑执行
telnet 服务器IP 80或nc -vz 服务器IP 80,看端口通不通。 - 云控制台安全组入方向添加规则:协议TCP,端口80/443,源地址0.0.0.0/0,以简米云为例,路径是ECS控制台 → 安全组 → 配置规则 → 入方向添加;酷番云在CVM或轻量应用服务器的安全组里操作。
- 系统防火墙放行:
firewall-cmd --permanent --add-service=http && firewall-cmd --reload,Ubuntu用ufw allow 80/tcp。
HTTPS场景下还要看证书,免费证书和一年几十块的付费证书在安装逻辑上没有区别,关键在证书文件要覆盖子域名,单域名证书不能自动覆盖二级域名,需要单独申请或直接使用泛域名证书,证书报错时,用 openssl s_client -connect blog.example.com:443 -servername blog.example.com 查看返回证书的SAN列表,确认里面有没有这个子域名。
nginx子域名配置访问不了时的配置检查清单
遇到子域名访问不了,Nginx是重灾区,把下面清单逐项过一遍,基本能解决大部分配置问题:
- server_name是否包含子域名,注意
blog.example.com和.example.com的优先级差异。 - root路径是否存在,权限是否可读取,
nginx -t只测语法,不测文件权限。 - 是否被默认server捕获,用
curl -I -H "Host: blog.example.com" http://127.0.0.1直接验证。 - 是否在多个server块里重复写了
listen 80 default_server,会导致重载失败。 - 日志路径是否可写,
tail -f /var/log/nginx/error.log是查看具体报错的最快方式。 - 重定向时是否把http跳转到https,但又没配置443 server块,造成循环。
- 宝塔或LNMP面板生成的配置是否和手动修改冲突,这类面板通常会重写配置文件。
业内专家指出,子域名访问类故障里,Web服务器配置错误的占比相当高,而且大多集中在server_name和default_server两个点。
不同报错对应不同故障层,一张表快速定位
| 浏览器表现 | 可能原因 | 优先排查 |
|---|---|---|
| 找不到服务器IP / NXDOMAIN | 解析记录未添加或未生效 | dig/nslookup、TTL、主机记录 |
| 连接超时 / 拒绝连接 | 安全组/防火墙未放行端口 | telnet、ss -lntp、安全组规则 |
| 默认页面 / 404 | server_name未匹配 | curl -H Host测试、Nginx配置 |
| 证书错误 / 不安全提示 | 证书未覆盖子域名或未配置443 | openssl s_client、证书SAN列表 |
| 502 Bad Gateway | 后端服务未启动或端口错误 | 后端进程状态、Nginx日志 |
Q&A
服务器设置子域名后访问一直提示“无法找到服务器IP”怎么办?
先在命令行用 nslookup 子域名 223.5.5.5 查公共DNS是否返回IP,如果公共DNS没结果,回到域名控制台检查解析记录是否添加成功、主机记录是否只填了子域名前缀、线路类型是否选了默认,如果公共DNS有结果而本地没有,清空本地DNS缓存或更换本地DNS,等待TTL过期后再测。
子域名解析了但打不开,ping得通IP但网站返回403是什么原因?
能ping通只说明服务器在线,不代表Web服务正常,403通常说明请求已经到达Web服务器,但服务器拒绝了访问,先看Nginx的error.log,确认是不是目录缺少index文件、权限不足,或者server块里的allow/deny规则限制,用 curl -I -H "Host: 子域名" http://127.0.0.1 测试本机响应,本机正常而外网403,再检查CDN、WAF或安全组里的拦截规则。
二级域名解析失败怎么排查证书报错?
HTTPS证书报错说明443端口通了,但证书信息和访问的子域名不匹配,使用 openssl s_client -connect 子域名:443 -servername 子域名 查看返回证书的SAN列表,确认是否包含该子域名,若使用的是单域名证书,二级域名需要单独申请或更换为泛域名证书,重新部署证书后,执行 nginx -t && systemctl reload nginx 完成重载。
子域名访问失败不是玄学,把它拆成解析、Web配置、网络放行三截,一段一段查,几乎都能找到具体原因,命令不用多,dig、curl加上nginx -t,就足够处理绝大多数子域名问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/647629.html





