多域名管理:域名一多怎么不失控

一个域名好管,十个就开始乱了。多域名最容易出的事故就是忘了续费,以及不知道某个域名指向哪里

一、先做一次盘点

不管有多少个,先把清单写出来:

域名注册商DNS用途到期日年费自动续费
www.bzii.cnCloudflareCloudflare主站2027-03-01$10
bzii.devNamesiloCloudflare备用2027-05-12$12
old-blog.com某家某家跳转2026-11-03¥60

这张表的价值在于:它逼你去查每一个域名的真实状态。盘点时往往会发现惊喜——某个早就不用但还在续费的域名,或者某个下周就到期却没开自动续费的。

批量查状态:

bash
#!/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.txt
bash
cat > domains.txt <<EOF
www.bzii.cn
bzii.dev
old-blog.com
EOF
bash domain-list.sh

二、统一到一处(如果可能)

域名分散在多家注册商,管理成本会指数上升。逐步集中:

bash
转移的时机:到期前 30 天以上
转移会自动续费 1 年 → 相当于「转移 + 续费」二合一
新注册或上次转移不满 60 天不能转

流程见「域名续费、转移与赎回期」那篇。

DNS 可以独立于注册商集中:即使域名在不同注册商,NS 都指向 Cloudflare,解析管理就统一了。这是成本最低的整合方式。

三、防止忘续费

三道保险:

  1. 全部开启自动续费
  2. 支付方式长期有效(信用卡换卡是头号翻车原因);
  3. 日历提醒:到期前 30 天和 7 天各一次。
bash
# 生成到期提醒(提前 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

把这个脚本放进定时任务,每周跑一次,输出发到你的通知渠道。

四、证书的集中管理

多个域名多个证书,最容易出的问题是「某个证书过期了没人发现」。

bash
# 批量检查证书剩余天数
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 真的在跑
bash
systemctl status certbot.timer
sudo certbot renew --dry-run

五、DNS 记录的一致性

多域名容易出现的混乱:

  • 某个域名忘了加 MX 记录;
  • 某个子域名指向了已下线的旧服务器;
  • SPF 记录不一致。
bash
# 批量导出所有域名的记录,做一次比对
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

存一份快照,下次对比看有没有意外变化。

六、清理不需要的域名

每年问自己一次:

  • 这个域名还在用吗?
  • 它是跳转用还是独立站点?
  • 我为什么当初买它?

处理方式:

情况处理
完全没用不续费,让它过期
只是跳转保留(便宜且能挡抢注)
品牌保护保留
曾经有内容保留(别让旧域名被人拿去发垃圾)

特别提醒:曾经做过站点的域名不要轻易放手。被别人注册后,旧链接会指向垃圾站,损害的是你的品牌。

七、命名与文档

  • 域名用途写在备注里(注册商支持备注字段);
  • 子域名的规划记一份文档(见「子域名规划」);
  • 关键域名在密码管理器里存一份记录(含注册商、到期日)。

八、成本估算

bash
# 年费合计
域名数 × 平均续费价
# 例:8 个域名 × ¥90 = ¥720/年

如果觉得贵,考虑:

  • 转到成本价注册商(Cloudflare Registrar);
  • 砍掉不用的域名;
  • 长期持有的域名一次续多年(还能规避涨价)。

九、一份季度检查清单

  • 跑一遍 domain-list.sh,确认所有域名解析正常
  • 检查 30 天内到期的域名
  • 检查所有证书剩余天数
  • 确认自动续费都开着、支付方式有效
  • 对比 DNS 快照,看有没有意外变更
  • 清理不需要的域名
bash
# 一条命令做个体检
bash domain-list.sh && bash cert-check.sh

多域名管理的本质不是技术,是记账。有清单、有提醒、有定期检查,就不会失控。