多域名管理:域名一多怎么不失控
一个域名好管,十个就开始乱了。多域名最容易出的事故就是忘了续费,以及不知道某个域名指向哪里。
一、先做一次盘点
不管有多少个,先把清单写出来:
| 域名 | 注册商 | DNS | 用途 | 到期日 | 年费 | 自动续费 |
|---|---|---|---|---|---|---|
| www.bzii.cn | Cloudflare | Cloudflare | 主站 | 2027-03-01 | $10 | ✅ |
| bzii.dev | Namesilo | Cloudflare | 备用 | 2027-05-12 | $12 | ✅ |
| old-blog.com | 某家 | 某家 | 跳转 | 2026-11-03 | ¥60 | ❌ |
这张表的价值在于:它逼你去查每一个域名的真实状态。盘点时往往会发现惊喜——某个早就不用但还在续费的域名,或者某个下周就到期却没开自动续费的。
批量查状态:
#!/usr/bin/env bash
# domain-list.sh
while read -r d; do
exp=$(whois "$d" 2>/dev/null | grep -iE "^\s*(expir|registry expiry)" | head -1 | awk -F": " "{print \$2}")
ns=$(dig +short "$d" NS 2>/dev/null | head -1)
ip=$(dig +short "$d" A 2>/dev/null | head -1)
printf "%-24s %-22s %-28s %s\n" "$d" "$exp" "$ns" "$ip"
done < domains.txtcat > domains.txt <<EOF
www.bzii.cn
bzii.dev
old-blog.com
EOF
bash domain-list.sh二、统一到一处(如果可能)
域名分散在多家注册商,管理成本会指数上升。逐步集中:
转移的时机:到期前 30 天以上
转移会自动续费 1 年 → 相当于「转移 + 续费」二合一
新注册或上次转移不满 60 天不能转流程见「域名续费、转移与赎回期」那篇。
DNS 可以独立于注册商集中:即使域名在不同注册商,NS 都指向 Cloudflare,解析管理就统一了。这是成本最低的整合方式。
三、防止忘续费
三道保险:
- 全部开启自动续费;
- 支付方式长期有效(信用卡换卡是头号翻车原因);
- 日历提醒:到期前 30 天和 7 天各一次。
# 生成到期提醒(提前 30 天的域名)
while read -r d; do
exp=$(whois "$d" 2>/dev/null | grep -i "expiry" | head -1 | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}")
[ -z "$exp" ] && continue
days=$(( ( $(date -d "$exp" +%s) - $(date +%s) ) / 86400 ))
if [ "$days" -lt 30 ]; then echo "⚠ $d 还有 $days 天到期"; fi
done < domains.txt把这个脚本放进定时任务,每周跑一次,输出发到你的通知渠道。
四、证书的集中管理
多个域名多个证书,最容易出的问题是「某个证书过期了没人发现」。
# 批量检查证书剩余天数
while read -r d; do
end=$(echo | openssl s_client -connect "$d:443" -servername "$d" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
[ -z "$end" ] && { echo "$d: 无证书或连接失败"; continue; }
left=$(( ( $(date -d "$end" +%s) - $(date +%s) ) / 86400 ))
printf "%-24s 剩余 %s 天\n" "$d" "$left"
done < domains.txt策略建议:
- 能用一个证书就用一个:SAN 证书把所有域名签在一起;
- 或者用通配符
*.www.bzii.cn; - certbot 会自动续期,但要检查
certbot.timer真的在跑。
systemctl status certbot.timer
sudo certbot renew --dry-run五、DNS 记录的一致性
多域名容易出现的混乱:
- 某个域名忘了加 MX 记录;
- 某个子域名指向了已下线的旧服务器;
- SPF 记录不一致。
# 批量导出所有域名的记录,做一次比对
while read -r d; do
echo "=== $d ==="
for t in A AAAA CNAME MX TXT NS; do
r=$(dig +short "$d" $t)
[ -n "$r" ] && echo "$t: $r"
done
done < domains.txt > dns-snapshot-$(date +%F).txt存一份快照,下次对比看有没有意外变化。
六、清理不需要的域名
每年问自己一次:
- 这个域名还在用吗?
- 它是跳转用还是独立站点?
- 我为什么当初买它?
处理方式:
| 情况 | 处理 |
|---|---|
| 完全没用 | 不续费,让它过期 |
| 只是跳转 | 保留(便宜且能挡抢注) |
| 品牌保护 | 保留 |
| 曾经有内容 | 保留(别让旧域名被人拿去发垃圾) |
特别提醒:曾经做过站点的域名不要轻易放手。被别人注册后,旧链接会指向垃圾站,损害的是你的品牌。
七、命名与文档
- 域名用途写在备注里(注册商支持备注字段);
- 子域名的规划记一份文档(见「子域名规划」);
- 关键域名在密码管理器里存一份记录(含注册商、到期日)。
八、成本估算
# 年费合计
域名数 × 平均续费价
# 例:8 个域名 × ¥90 = ¥720/年如果觉得贵,考虑:
- 转到成本价注册商(Cloudflare Registrar);
- 砍掉不用的域名;
- 长期持有的域名一次续多年(还能规避涨价)。
九、一份季度检查清单
- 跑一遍
domain-list.sh,确认所有域名解析正常 - 检查 30 天内到期的域名
- 检查所有证书剩余天数
- 确认自动续费都开着、支付方式有效
- 对比 DNS 快照,看有没有意外变更
- 清理不需要的域名
# 一条命令做个体检
bash domain-list.sh && bash cert-check.sh多域名管理的本质不是技术,是记账。有清单、有提醒、有定期检查,就不会失控。
