🌐 域名与 DNS:注册 / 解析 / CDN / SSL

域名是你产品的门牌号,DNS 是互联网的导航系统——搞懂它们,才能让用户找到你
📑 目录

域名与 DNS 是什么

当你输入 google.com,浏览器怎么知道要去哪个 IP 地址?这就是 DNS(Domain Name System)做的事——把人类可读的域名翻译成机器可用的 IP 地址

如果互联网是座城市:

🔑 核心概念:注册商 ≠ DNS 托管商

这是新手最容易混淆的点:

💡 最佳实践:注册商和 DNS 托管商分开,降低单点风险。比如 Namecheap 注册 + Cloudflare DNS。

DNS 解析全流程

从浏览器输入 URL 到页面加载,DNS 经历了什么?

1
浏览器缓存 — 浏览器先查本地缓存,有且未过期则直接用
2
操作系统缓存 — OS 层面的 DNS 缓存(macOS: dscacheutil -flushcache
3
递归解析器(Recursive Resolver) — 通常是 ISP 提供的或你配置的(如 1.1.1.1 / 8.8.8.8)
4
根域名服务器(Root Nameserver) — 返回 .com 的 TLD 服务器地址(全球 13 组)
5
TLD 域名服务器 — 返回 example.com 的权威 DNS 服务器地址
6
权威域名服务器(Authoritative Nameserver) — 返回最终的 A 记录 IP 地址
7
浏览器连接 — 拿到 IP 后,TCP 三次握手 → TLS 握手 → HTTP 请求
💡 典型 DNS 查询耗时:冷查询 20-120ms,热查询(缓存命中)1-5ms。选对 DNS 托管商能把冷查询压到 10-20ms。

DNS 缓存层级

缓存层典型 TTL控制方清除方式
浏览器跟随 DNS TTL浏览器清除浏览器缓存 / 隐身模式
操作系统跟随 DNS TTLOSipconfig /flushdns / dscacheutil -flushcache
递归解析器跟随 DNS TTLISP / 1.1.1.1等 TTL 过期 / 部分支持刷新
权威 DNSN/A(源头)你自己修改记录即生效
⚠️ TTL 陷阱:修改 DNS 记录后,旧记录可能在全球各级缓存中存活到 TTL 过期。所以在切换前务必先将 TTL 降到 300 秒(5分钟),等旧 TTL 过期后再改记录值。

DNS 记录类型详解

DNS 记录是域名系统的"数据行",每条记录告诉世界一个关于你域名的事实。

核心记录(必须掌握)

A 记录 — 地址记录(Address)

将域名指向一个 IPv4 地址。最基础、最常用的记录。

A
example.com
→ 104.21.35.186
3600
# 使用 dig 查询
dig A example.com +short
# 104.21.35.186

# 使用 nslookup
nslookup -type=A example.com
AAAA 记录 — IPv6 地址记录

和 A 记录一样,但指向 IPv6 地址。双栈部署时同时配置 A + AAAA。

AAAA
example.com
→ 2606:4700:3037::ac43:c3ba
3600
💡 IPv6 趋势:移动网络、国内运营商越来越多 IPv6-only 用户。不配 AAAA = 丢失这部分用户。
CNAME 记录 — 别名记录(Canonical Name)

将一个域名指向另一个域名。常用于子域名指向 CDN / SaaS 平台。

CNAME
www
→ example.com(或 cdn.example.com.cdn.cloudflare.net)
3600
⚠️ 根域名不能设 CNAMEexample.com 不能直接 CNAME(RFC 规范不允许根域名与 MX/NS 等记录共存)。解决方案:用 A 记录指向,或使用 Cloudflare 的 CNAME Flattening。
MX 记录 — 邮件交换记录(Mail Exchange)

指定接收该域名邮件的邮件服务器。优先级数值越小越优先。

MX
example.com
→ 10 mail1.example.com
3600
MX
example.com
→ 20 mail2.example.com
3600
TXT 记录 — 文本记录

存储任意文本信息。用途广泛:域名验证、SPF/DKIM/DMARC、安全认证。

TXT
example.com
→ "v=spf1 include:_spf.google.com ~all"
3600
TXT
_dmarc.example.com
→ "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"
3600
TXT
_verification.example.com
→ "google-site-verification=abc123..."
3600
NS 记录 — 域名服务器记录(Name Server)

指定哪些 DNS 服务器负责解析该域名。在注册商处配置,指向你的 DNS 托管商。

NS
example.com
→ ns1.cloudflare.com
86400
NS
example.com
→ ns2.cloudflare.com
86400
💡 NS 记录的 TTL 通常很长(86400 = 24h),切换 DNS 托管商时务必提前降 TTL。

高级记录(SaaS 开发者常用)

SRV 记录

服务定位记录,指定特定服务的服务器和端口。

SRV
_sip._tcp.example.com → 10 60 5060 sip.example.com

格式:优先级 权重 端口 目标主机

CAA 记录

证书授权记录,指定哪些 CA 可以为你的域名签发 SSL 证书。防止未授权签发。

CAA
example.com → 0 issue "letsencrypt.org"
PTR 记录

反向 DNS 记录,IP → 域名。主要用于邮件服务器信誉(防垃圾邮件)。

PTR
186.35.21.104.in-addr.arpa → mail.example.com
SOA 记录

起始授权记录,定义域名的管理信息(主NS、管理员邮箱、序列号、刷新间隔)。由 DNS 托管商自动生成。

域名注册商选型

域名注册商是你"买域名"的地方。选择标准:价格透明度、续费价格、域名转移政策、隐私保护

注册商 .com 注册价 .com 续费价 WHOIS 隐私 DNS 托管 特点
Cloudflare Registrar ~$9.77 ~$9.77 ✅ 免费 ✅ 内置 推荐 批发价无加价,与 DNS/CDN 一体
Namecheap ~$5.98 ~$13.98 ✅ 免费 ✅ 内置 首年便宜,续费贵,界面友好
Porkbun ~$5.99 ~$10.99 ✅ 免费 ✅ 内置 价格透明,续费合理,UI 简洁
Google Domains 已出售给 Squarespace,不推荐新用户
GoDaddy ~$2.99 ~$21.99 ❌ 付费 ✅ 内置 避坑 首年超低,续费极高,Upsell 严重
阿里云(万网) ¥55 ¥69 ❌ 付费 ✅ 内置 国内备案必备,.cn 域名首选
腾讯云 DNSPod ¥55 ¥69 ❌ 付费 ✅ 内置 国内解析速度快,API 强大
🏠 国内域名 vs 海外域名

国内注册(阿里云/腾讯云)

  • ✅ .cn 域名必须国内注册
  • ✅ 国内解析速度快
  • ✅ ICP 备案流程顺畅
  • ❌ 需要实名认证
  • ❌ WHOIS 隐私通常收费
  • ❌ 转出流程繁琐

海外注册(Cloudflare/Namecheap)

  • ✅ WHOIS 隐私免费
  • ✅ 转出自由
  • ✅ 价格更透明
  • ❌ 国内解析可能慢
  • ❌ 无法做 ICP 备案
  • ❌ .cn 域名不支持
💡 策略:面向国内用户的 SaaS → 国内注册 + ICP 备案。面向海外 → 海外注册。双线部署时用不同域名分别备案和海外服务。

域名选择建议

🏷️ 后缀选择
  • .com — 首选,认知度最高
  • .io — 开发者/科技圈流行,价格贵
  • .dev — Google 管理,强制 HTTPS
  • .app — 同 .dev,强制 HTTPS
  • .ai — AI 产品标配,$70+/年
  • .co — startup 常用,易和 .com 混淆
📏 命名原则
  • 越短越好(≤8 字母最佳)
  • 易拼写、易口播
  • 避免连字符和数字
  • 避免商标冲突
  • 先查社交媒体用户名是否可用
  • 注册常见拼写错误变体
💰 预算考量
  • 新注册 .com ≈ $10/年
  • Premium 域名 $1,000-$50,000+
  • 先验证 PMF 再买高价域名
  • 域名是订阅费,不是一次性成本
  • 设自动续费,避免过期被抢注

DNS 托管商选型

DNS 托管商决定你的解析速度、可用性和安全防护能力。

特性 Cloudflare AWS Route 53 DNSimple 腾讯云 DNSPod NS1 (IBM)
全球解析点 300+ 60+ 30+ 50+(国内密集) 30+
免费计划 ✅ 无限查询 ❌ 按查询计费 ❌ 最低 $8/月 ✅ 有限免费 ❌ 企业定价
解析速度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐(国内) ⭐⭐⭐⭐
DDoS 防护 ✅ 免费 ✅ Shield Advanced(付费) ✅ 基础
DNSSEC ✅ 一键启用 ✅ 需手动配置 ✅ 一键启用 ✅ 支持
CNAME Flattening ✅ 免费计划
API 质量 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
Terraform Provider ✅ 官方 ✅ 官方 ✅ 官方 ✅ 社区 ✅ 官方
价格 免费 / $20/月(Pro) $0.50/区域 + $0.40/百万查询 $8-250/月 免费 / ¥99/月(专业) 联系销售
适用场景 首选 大多数 SaaS AWS 生态深度用户 简单易用、开发者友好 国内业务首选 流量调度/智能路由

Cloudflare DNS 实战配置

# Cloudflare DNS API 示例 — 创建 A 记录
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
  -H "Authorization: Bearer {api_token}" \
  -H "Content-Type: application/json" \
  --data '{
    "type": "A",
    "name": "app.mysaas.com",
    "content": "104.21.35.186",
    "ttl": 300,
    "proxied": true
  }'

# 查询现有记录
curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
  -H "Authorization: Bearer {api_token}"

Route 53 实战配置

# Terraform — Route 53 托管区域 + A 记录
resource "aws_route53_zone" "main" {
  name = "mysaas.com"
}

resource "aws_route53_record" "app" {
  zone_id = aws_route53_zone.main.zone_id
  name    = "app.mysaas.com"
  type    = "A"
  ttl     = 300
  records = ["104.21.35.186"]
}

# Alias 到 ALB(推荐,不收费)
resource "aws_route53_record" "app_alias" {
  zone_id = aws_route53_zone.main.zone_id
  name    = "app.mysaas.com"
  type    = "A"

  alias {
    name                   = aws_lb.app.dns_name
    zone_id                = aws_lb.app.zone_id
    evaluate_target_health = true
  }
}

代理模式 vs 仅 DNS 模式(Cloudflare)

☁️ 代理模式(Proxied / 橙色云)
  • ✅ 流量经过 Cloudflare,隐藏源站 IP
  • ✅ 自动 DDoS 防护
  • ✅ 自动 SSL(Universal SSL)
  • ✅ WAF、Bot 防护、缓存
  • ❌ 增加约 10-50ms 延迟
  • ❌ WebSocket 需 Pro 计划(长时间连接)
  • ❌ 某些端口不可用
🔍 仅 DNS 模式(DNS Only / 灰色云)
  • ✅ 延迟最低(直连源站)
  • ✅ 完全控制流量路径
  • ✅ 任意端口可用
  • ❌ 源站 IP 暴露
  • ❌ 无自动 DDoS 防护
  • ❌ 需自行管理 SSL 证书
  • ❌ 无缓存加速
💡 推荐策略:SaaS 前端和 API → 代理模式(安全 + 加速)。数据库、SSH 等 → 仅 DNS 模式(直连低延迟)。

CDN 加速与配置

CDN(Content Delivery Network)将你的内容缓存到全球边缘节点,用户从最近的节点获取数据,大幅降低延迟。

CDN 工作原理

用户请求
CDN 边缘节点
缓存命中?
→ YES →
直接返回


↓ NO

回源(Origin)
缓存 + 返回

CDN 选型对比

CDN 免费额度 全球节点 国内节点 特点 适合
Cloudflare 无限流量(有速率限制) 300+ ❌ 无 DNS+CDN+WAF 一体,免费计划慷慨 首选 海外 SaaS
Vercel 100GB/月 100+ ❌ 无 与 Next.js 深度集成 Next.js 项目
jsDelivr 无限(开源库专用) 1500+ ✅ 有 npm/GitHub 开源资源 CDN 开源库分发
AWS CloudFront 1TB/月(首年) 400+ ❌ 无 与 S3/Lambda 深度集成 AWS 生态用户
又拍云 有免费计划 500+(国内密集) ✅ 密集 国内老牌 CDN,价格低 国内业务
阿里云 CDN 按量付费 2800+(国内密集) ✅ 密集 国内节点最多,ICP 备案后可用 国内大型业务

CDN 缓存策略配置

# Cloudflare Page Rules — 缓存策略示例

# 静态资源:强缓存
# URL: *mysaas.com/_next/static/*
# Cache Level: Cache Everything
# Edge Cache TTL: 1 month
# Browser Cache TTL: 1 year

# API 接口:不缓存
# URL: *mysaas.com/api/*
# Cache Level: Bypass

# HTML 页面:短时缓存
# URL: *mysaas.com/*
# Cache Level: Cache Everything
# Edge Cache TTL: 4 hours
# Nginx 配置 — 源站设置缓存头
location /_next/static/ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

location /api/ {
    add_header Cache-Control "no-store, no-cache, must-revalidate";
    add_header Pragma "no-cache";
}

location / {
    expires 4h;
    add_header Cache-Control "public, s-maxage=14400";
}

缓存清除(Purge)

# Cloudflare API — 清除缓存
# 清除所有
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  --data '{"purge_everything":true}'

# 按文件清除
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://mysaas.com/index.html"]}'}

# 按 Tag 清除(需 Pro 计划)
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  --data '{"tags":["product-123"]}'

SSL/TLS 证书

HTTPS 不再是可选——Google 将 HTTPS 作为排名因素,Chrome 对 HTTP 页面标记"不安全"。

SSL 证书类型

类型验证方式签发时间价格适用场景
DV(Domain Validation) 自动(DNS/文件验证) 几分钟 免费(Let's Encrypt) 首选 99% 的 SaaS
OV(Organization Validation) 人工验证组织信息 1-3 天 $100-400/年 金融、政府,需要显示公司名
EV(Extended Validation) 严格人工验证 3-7 天 $200-800/年 高安全要求,浏览器地址栏显示公司名(已逐渐淡出)

Let's Encrypt 自动化(Certbot)

# 安装 Certbot
apt install certbot python3-certbot-nginx

# 首次获取证书(Nginx 插件自动配置)
certbot --nginx -d mysaas.com -d www.mysaas.com

# DNS 验证(适用于无公网访问的内部服务)
certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d mysaas.com -d '*.mysaas.com'

# 通配符证书
certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d '*.mysaas.com' -d 'mysaas.com'

# 自动续期(Certbot 自动添加 cron)
certbot renew --dry-run  # 测试续期流程

# 查看证书信息
certbot certificates

Nginx SSL 配置最佳实践

# /etc/nginx/sites-enabled/mysaas.com
server {
    listen 443 ssl http2;
    server_name mysaas.com www.mysaas.com;

    # 证书路径(Certbot 自动管理)
    ssl_certificate     /etc/letsencrypt/live/mysaas.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mysaas.com/privkey.pem;

    # SSL 优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS(慎用!先短时间测试)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;

    # 会话复用
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# HTTP → HTTPS 重定向
server {
    listen 80;
    server_name mysaas.com www.mysaas.com;
    return 301 https://$host$request_uri;
}

Cloudflare SSL 模式

模式用户→CFCF→源站安全性适用场景
OffHTTPHTTP❌ 无加密仅开发/测试
FlexibleHTTPSHTTP⚠️ 半程加密不推荐 源站无证书时
FullHTTPSHTTPS✅ 加密但不验证自签证书可用
Full (Strict)HTTPSHTTPS + 验证证书✅ 端到端安全推荐 生产环境
⚠️ Flexible 模式的坑:用户以为 HTTPS 安全,但 CF→源站 走 HTTP。如果你的源站有重定向逻辑,会造成无限重定向循环(308 loop)。永远使用 Full (Strict) 模式。

DNSSEC 安全扩展

DNSSEC 通过数字签名确保 DNS 响应的完整性和真实性,防止 DNS 缓存投毒和劫持攻击。

🔐 DNSSEC 是如何工作的?
  1. 域名所有者用私钥对 DNS 记录签名
  2. 公钥通过 DS 记录上传到注册商(注册商将 DS 记录放入 TLD 区域)
  3. 递归解析器验证签名 → 确认记录未被篡改
  4. 整条信任链:根密钥 → TLD 密钥 → 你的域名密钥
💡 Cloudflare 支持一键启用 DNSSEC:Dashboard → DNS → DNSSEC → Enable。它会自动生成 DS 记录,你只需复制到注册商。
操作CloudflareRoute 53DNSPod
启用方式一键启用 + 复制 DS 到注册商手动配置 KSK + DS控制台一键
密钥轮换自动手动手动
多签名者 DNSSEC✅ 支持

邮件 DNS 配置

SaaS 产品必须配置邮件 DNS,否则发出的邮件会被当成垃圾邮件。三个核心记录:

SPF(Sender Policy Framework)

声明哪些服务器可以代表你的域名发送邮件。

# SPF 记录(TXT 类型)
# 允许 Google Workspace 发送
"v=spf1 include:_spf.google.com ~all"

# 允许 SendGrid + 自己的服务器
"v=spf1 ip4:1.2.3.4 include:sendgrid.net ~all"

# 多个服务
"v=spf1 include:_spf.google.com include:sendgrid.net include:mailgun.org ~all"

# 修饰符说明:
# +all → 允许所有(❌ 危险!)
# ~all → 软拒绝(可疑但不丢弃,推荐入门)
# -all → 硬拒绝(严格,推荐生产)
# ?all → 中立(等于没有 SPF)
⚠️ SPF 的 DNS 查询限制为 10 次。include 每个算一次,超过 10 次会导致 SPF 验证失败(PermError)。用 ip4/ip6 直接指定 IP 更高效。

DKIM(DomainKeys Identified Mail)

用加密签名验证邮件内容确实来自你,且未被篡改。

# DKIM 记录示例(SendGrid)
# 名称:s1._domainkey.mysaas.com
# 类型:TXT
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."

# Google Workspace DKIM
# 名称:google._domainkey.mysaas.com
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."

# 多个 DKIM 选择器(不同邮件服务商用不同前缀)
# s1._domainkey → SendGrid
# google._domainkey → Google Workspace
# mailgun._domainkey → Mailgun

DMARC(Domain-based Message Authentication, Reporting & Conformance)

告诉接收方:如果 SPF/DKIM 都没过,怎么处理。同时提供报告机制。

# DMARC 记录
# 名称:_dmarc.mysaas.com
# 类型:TXT

# 阶段 1:监控模式(只收报告,不拒绝)
"v=DMARC1; p=none; rua=mailto:dmarc@mysaas.com; ruf=mailto:dmarc@mysaas.com; pct=100"

# 阶段 2:隔离模式(可疑邮件进垃圾箱)
"v=DMARC1; p=quarantine; rua=mailto:dmarc@mysaas.com; pct=50"

# 阶段 3:拒绝模式(不合格邮件直接拒绝)
"v=DMARC1; p=reject; rua=mailto:dmarc@mysaas.com; pct=100"

# 参数说明:
# p=none|quarantine|reject  — 策略
# rua=  — 聚合报告接收地址
# ruf=  — 法证报告接收地址
# pct=  — 应用策略的百分比(逐步推进用)
📧 邮件 DNS 最佳实践路线图
  1. 第 1 天:配置 SPF(~all)+ DKIM
  2. 第 1 天:配置 DMARC p=none,开始收集报告
  3. 第 1-2 周:分析 DMARC 报告,确认所有合法发件源都在 SPF 中
  4. 第 3 周:SPF 改为 -all,DMARC 改为 p=quarantine; pct=25
  5. 第 4-5 周:逐步提高 pct 到 100%
  6. 第 6 周:DMARC 改为 p=reject,邮件安全完成 🎉

多域名 / 子域名策略

SaaS 产品的域名架构不是"一个域名打天下",而是精心设计的层级系统。

典型 SaaS 域名架构

# 主站
mysaas.com           → 营销主页 / Landing Page
www.mysaas.com       → 301 重定向到 mysaas.com

# 应用
app.mysaas.com       → 主应用(前端 + API)
api.mysaas.com       → API 网关(独立域名方便 CORS + 限流)

# 文档
docs.mysaas.com      → 文档站(Mintlify / Docusaurus)
status.mysaas.com    → 服务状态页(Betteruptime / Instatus)

# 基础设施
cdn.mysaas.com       → CDN 源站(如需自定义域名)
ws.mysaas.com        → WebSocket 服务
admin.mysaas.com     → 管理后台(IP 白名单)

# 邮件
mail.mysaas.com      → 邮件服务器(PTR 反向解析用)

# 多租户(自定义域名)
tenant.com           → CNAME → app.mysaas.com(SaaS 提供自定义域名)

# 内部
staging.mysaas.com   → 预发布环境
dev.mysaas.com       → 开发环境

自定义域名(Custom Domain)实现

SaaS 产品让客户绑定自己的域名是核心功能。实现步骤:

# 客户侧配置(你提供给客户的说明)
# 1. 客户在自己的 DNS 添加 CNAME:
app.customer.com  →  CNAME  →  cname.mysaas.com

# 2. 你这边需要:
# - 自动签发 SSL 证书(Let's Encrypt / Cloudflare)
# - 在反向代理中识别 Host 头
# - 查询数据库匹配域名 → 租户

# Nginx 配置 — 通配符 Server Name
server {
    listen 443 ssl http2;
    server_name ~^(?.+)\.mysaas\.com$ app.*.com;

    # SSL 证书(SNI)
    ssl_certificate     /etc/letsencrypt/live/$host/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/$host/privkey.pem;

    location / {
        # 查询租户信息
        set $tenant_id "";
        access_by_lua_block {
            local host = ngx.var.host
            local tenant = ngx.shared.tenants:get(host)
            if tenant then
                ngx.var.tenant_id = tenant
            else
                ngx.exit(404)
            end
        }
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X-Tenant-ID $tenant_id;
    }
}

# 自动签发证书的脚本思路
# 1. 客户添加 CNAME 后,你验证 CNAME 指向你的服务
# 2. 调用 Let's Encrypt DNS-01 验证签发证书
# 3. 证书自动安装到 Nginx/Caddy
# 4. 定时续期

通配符证书 vs 单域名证书

🌟 通配符证书 *.mysaas.com
  • ✅ 一个证书覆盖所有子域名
  • ✅ 新增子域名无需签发
  • ❌ 必须 DNS-01 验证(需 DNS API)
  • ❌ 不覆盖二级子域名(a.b.mysaas.com
  • ❌ 私钥泄露影响所有子域名
🏷️ 单域名证书
  • ✅ HTTP-01 验证简单
  • ✅ 泄露影响范围小
  • ✅ 适合自定义域名场景
  • ❌ 每个子域名单独签发
  • ❌ 证书管理复杂度高
  • ❌ 有速率限制(每周 50 张/域名)
💡 推荐策略:自有子域名用通配符证书,客户自定义域名用单域名证书 + 自动签发。

域名迁移与切换

更换 DNS 托管商或迁移服务器时,零停机是目标。

DNS 托管商迁移流程

# 零停机迁移 DNS 托管商

# === 第 1 步:准备(提前 48 小时) ===
# 1. 在新 DNS 托管商创建所有记录(镜像旧记录)
# 2. 验证新记录正确性
dig @new-nameserver.example.com mysaas.com A

# === 第 2 步:降低 TTL(提前 24 小时) ===
# 在旧 DNS 托管商,把所有记录的 TTL 降到 300 秒
# 等待旧 TTL 过期(最长 24-48 小时)

# === 第 3 步:切换 NS 记录 ===
# 在域名注册商处,修改 NS 记录指向新托管商
# 旧:ns1.old-dns.com, ns2.old-dns.com
# 新:ns1.cloudflare.com, ns2.cloudflare.com

# === 第 4 步:双活期(72 小时) ===
# 保持旧 DNS 托管商的记录不删除
# 全球 NS 缓存逐步更新(最长 48 小时)

# === 第 5 步:验证完成 ===
# 检查全球 DNS 解析是否全部指向新托管商
dig mysaas.com NS +short
# 应该返回新的 NS 记录

# === 第 6 步:清理 ===
# 确认全球切换完成后,删除旧 DNS 托管商的记录
# 恢复 TTL 到正常值(3600)

服务器 IP 迁移流程

# 零停机更换源站 IP

# 1. 降低 TTL → 300 秒(提前 24-48h)
# 2. 新服务器部署完毕,验证可用
curl -H "Host: mysaas.com" http://new-ip/

# 3. 修改 A 记录指向新 IP
# 4. 等待 TTL 过期 + 全球缓存更新
# 5. 旧服务器保持运行 48 小时
# 6. 确认无流量后关闭旧服务器
# 7. 恢复 TTL 到 3600
⚠️ 最危险的迁移错误:同时改 NS 和改记录值。必须分步进行——先降低 TTL,再改记录,确认生效后再动 NS。一步一动,每步验证。

DNS 故障排查

DNS 问题是最令人头疼的——因为缓存无处不在,改了不一定生效。以下是系统排查方法。

必备工具

# dig — 最强大的 DNS 查询工具
# 基本查询
dig mysaas.com A
dig mysaas.com A +short        # 只显示 IP
dig mysaas.com CNAME           # 查 CNAME
dig mysaas.com MX              # 查邮件

# 指定 DNS 服务器查询
dig @1.1.1.1 mysaas.com A      # 用 Cloudflare DNS 查
dig @8.8.8.8 mysaas.com A      # 用 Google DNS 查
dig @223.5.5.5 mysaas.com A    # 用阿里 DNS 查(国内)

# 追踪解析路径
dig mysaas.com A +trace

# 查 NS 记录
dig mysaas.com NS

# 查 DNSSEC
dig mysaas.com A +dnssec

# nslookup — 简单查询
nslookup mysaas.com
nslookup -type=MX mysaas.com

# host — 最简洁
host mysaas.com
host -t CNAME www.mysaas.com

# whois — 查域名注册信息
whois mysaas.com

# 检查全球 DNS 传播状态
# https://www.whatsmydns.net/
# 在线工具,可查看全球各地区的 DNS 解析结果

常见问题排查清单

症状可能原因排查方法
域名无法访问 NS 未指向正确托管商 dig example.com NS + whois example.com
修改记录后不生效 TTL 缓存未过期 dig @1.1.1.1 example.com A 对比权威服务器结果
部分地区能访问部分不能 DNS 传播未完成 / NS 缓存不一致 whatsmydns.net 检查全球状态
HTTPS 证书错误 证书过期 / SNI 不匹配 / CAA 阻止 openssl s_client -connect example.com:443 -servername example.com
邮件进垃圾箱 SPF/DKIM/DMARC 未配置或错误 发送测试邮件到 mail-tester.com
Cloudflare 502 错误 源站不可达 / SSL 模式错误 检查源站是否运行 + CF SSL 模式是否匹配
无限重定向循环 CF Flexible 模式 + 源站 301 CF SSL 模式改为 Full (Strict)
CNAME 不生效 根域名不能 CNAME 改用 A 记录 或 Cloudflare CNAME Flattening

在线诊断工具

🔍 DNS 诊断
🔒 SSL 诊断

上线 Checklist

✅ SaaS 域名上线检查清单

🌐 域名 & DNS

  • ☐ 域名注册完成,自动续费已开启
  • ☐ NS 记录指向 DNS 托管商
  • ☐ A/AAAA 记录配置正确
  • ☐ www 子域名 CNAME 或 301 重定向
  • ☐ DNSSEC 已启用
  • ☐ TTL 设置合理(生产环境 300-3600)
  • ☐ CAA 记录限制证书签发 CA

🔒 SSL/TLS

  • ☐ HTTPS 强制跳转
  • ☐ SSL Labs 评分 A+
  • ☐ HSTS 头已设置
  • ☐ 证书自动续期已配置
  • ☐ Cloudflare SSL 模式为 Full (Strict)

📧 邮件

  • ☐ SPF 记录已配置(-all
  • ☐ DKIM 记录已配置
  • ☐ DMARC 记录已配置(至少 p=none
  • ☐ PTR 反向解析已配置(自建邮件时)
  • ☐ 邮件测试通过(mail-tester.com 评分 9+/10)

🚀 CDN & 性能

  • ☐ CDN 已配置并生效
  • ☐ 静态资源缓存策略正确
  • ☐ API 接口绕过缓存
  • ☐ Gzip/Brotli 压缩已开启
  • ☐ HTTP/2 或 HTTP/3 已启用

🛡️ 安全

  • ☐ 源站 IP 不暴露(代理模式)
  • ☐ WAF 规则已配置
  • ☐ Rate Limiting 已配置
  • ☐ 安全响应头完整
🔗 从 Agent 研究到 SaaS 实践

Agent 深度研究中,DNS 和域名配置是多个项目的关键基础设施:

💡 Agent 场景的 DNS 特殊考虑:Agent 高频调用外部 API 时,DNS 解析可能成为瓶颈。建议:(1) 应用层 DNS 缓存(如 Node.js 的 dns.lookup 缓存);(2) 使用 HTTP/2 连接复用减少 DNS 查询;(3) 关键 API 用 IP 直连 + 定期 DNS 刷新作为 fallback。