通过比对宝塔站点绑定的域名与DNS实际解析IP是否匹配服务器公网IP,可识别出未被任何域名正确解析的“孤儿网站”;需过滤内网IP,用Resolve-DnsName(Windows)或dig(Linux)批量验证A记录。

查哪些网站没被任何域名解析到
宝塔里「网站」列表显示的站点,不等于线上真实可访问的站点。有些站点绑了域名但 DNS 没生效,有些干脆只绑了 IP 或压根没绑——它们就是“孤儿网站”,占着端口、日志、磁盘空间,还可能被误扫或恶意请求打穿。
核心思路是:先拿到宝塔所有站点绑定的域名(含 IP),再用 Resolve-DnsName 或 dig 批量查这些域名当前实际解析出的 IP,最后比对是否匹配服务器公网 IP。不匹配 + 无 IP 绑定 = 孤儿。
- 在宝塔后台 → 网站 → 全部站点,记下每个站点的「域名管理」里填的所有条目(包括
192.168.1.100、example.com、www.example.com) - 过滤掉纯内网 IP(如
127.0.0.1、10.x.x.x、172.16.x.x、192.168.x.x),它们无法被公网 DNS 解析,也不该出现在域名栏 - 把剩下所有公网可访问的域名导出为文本,每行一个,例如:
example.com www.example.com blog.myapp.net
用 PowerShell 快速批量验证 DNS 解析结果(Windows 管理端)
如果你从 Windows 本地管理宝塔服务器,Resolve-DnsName 是最轻量的选择,无需装额外工具。注意它默认只查 A 记录,且不走本地 hosts,反映的是真实公网 DNS 状态。
- 保存上面导出的域名列表为
domains.txt,放在桌面 - 运行以下脚本(替换
$serverIP为你服务器的**公网 IP**):$serverIP = "203.208.60.1" Get-Content .\domains.txt | ForEach-Object { $domain = $_.Trim() if (-not $domain) { return } $result = Resolve-DnsName $domain -Type A -ErrorAction SilentlyContinue $ips = ($result | Where-Object {$_.Type -eq 'A'} | Select-Object -ExpandProperty IPAddress) -as [string[]] if ($ips.Count -eq 0) { Write-Host "[MISSING] $domain → 无 A 记录" -ForegroundColor Red } elseif ($ips -notcontains $serverIP) { Write-Host "[MISMATCH] $domain → 解析到 $($ips -join ', ')" -ForegroundColor Yellow } else { Write-Host "[OK] $domain" -ForegroundColor Green } } - 输出带
[MISSING]或[MISMATCH]的域名,就是潜在孤儿网站的候选
Linux 服务器端直接用 dig + awk 做等效检查
如果你习惯在服务器本地操作,不用跳转 Windows,dig 更可靠(nslookup 输出格式难解析,host 不支持超时控制)。关键是要加 +short 和超时,避免卡死。
- 先确认已安装:
dig -v,没装就yum install bind-utils或apt install dnsutils - 执行单域名快速测试:
dig +short +timeout=2 +tries=1 example.com A | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' - 批量处理脚本(保存为
check-dns.sh):#!/bin/bash SERVER_IP="203.208.60.1" while IFS= read -r domain; do [ -z "$domain" ] && continue ips=$(dig +short +timeout=2 +tries=1 "$domain" A 2>/dev/null | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' | sort -u) if [ -z "$ips" ]; then echo "[MISSING] $domain" elif ! echo "$ips" | grep -q "^$SERVER_IP$"; then echo "[MISMATCH] $domain → $ips" fi done < domains.txt - 注意:
dig默认查系统配置的 DNS,如需指定公共 DNS(比如1.1.1.1),在命令里加@1.1.1.1
确认孤儿后怎么安全清理
别急着删。一个站点是不是真孤儿,还得看它有没有被其他方式调用:反向代理目标、API 回调地址、内部服务依赖、甚至某些 CMS 的定时任务 URL。直接删可能断业务。
- 先停用站点:宝塔后台 → 站点 → 设置 → 「网站目录」里关掉「运行状态」,观察 24 小时日志(
/www/wwwlogs/你的域名.log)是否还有有效访问 - 检查 Nginx 配置里有没有
proxy_pass指向这个站点根路径(/www/wwwroot/xxx),哪怕它没绑域名,也可能被其他站点反代 - 确认数据库是否被其他站点共用:进「数据库」→ 点开每个库的「权限列表」,看「允许访问的主机」是否包含
%或其他站点域名 - 真正要删时,优先用宝塔后台操作(自动删配置+日志+目录),不要手动
rm -rf,否则残留nginx配置块会导致重载失败
最常被忽略的一点:宝塔的「子目录绑定」功能创建的站点,不会出现在主网站列表里,但会生成独立配置文件,也得进 /www/server/panel/vhost/nginx/ 手动搜 root /www/wwwroot/ 排查。
















