适用场景:多个域名/子域名都指向同一台服务器(同一源站 IP),希望复用同一个 CloudFront 分发 ,统一做 CDN + 限流/防护。
前提:域名 DNS 在 Route53,CloudFront 已创建分发,回源使用
origin.xxx域名。
一、前提条件(必须满足)
- CloudFront 分发已存在(已部署/可用)。
- 源站可被 CloudFront 回源 (例如 origin 域名:
origin.wwwnav.com→ A 记录 → 源站 IP)。 - CloudFront 使用的证书必须在 ACM us-east-1(N. Virginia)(CloudFront 只能绑定该区域证书)。
- 要追加的域名必须加入 CloudFront 的 Alternate domain names(CNAMEs)并被证书覆盖,否则无法保存。
二、现象与原因说明(关键原理)
现象 1:Route53 里"Alias → CloudFront 分配"下拉选择不到资源
- 表现:编辑记录(如
greasyfork.xxx.com的 A 记录)时,选择 CloudFront 分配的别名,下拉提示 未找到任何资源。 - 原因:CloudFront 分发未添加该域名(Alternate domain names/CNAMEs 中没有它) 。
Route53 的 CloudFront Alias 下拉只会列出"已声明服务该域名"的分发。
现象 2:CloudFront 添加新域名保存时报错(证书 SSL)
-
报错典型文案:
The certificate that is attached to your distribution doesn't cover the alternate domain name (CNAME) that you're trying to add.
-
原因:分发绑定的证书不包含你要追加的域名(SSL/SNI 不匹配)。CloudFront 不允许保存。
三、正确做法:把同一源站的"新域名/子域名"追加到同一个 CloudFront 分发
Step 1:准备/更新证书(解决 SSL 覆盖问题)
推荐一次性解决:用通配符证书避免反复改证书。
- 打开 ACM ,切换区域到 US East (N. Virginia / us-east-1)
- 申请证书(DNS 验证):
xxx.com*.xxx.com(覆盖所有子域,如greasyfork.xxx.com)
- 用 Route53 自动创建验证记录,等待证书状态 Issued。
Step 2:把 CloudFront 分发的证书切换为新证书
CloudFront → Distributions → 选中你的分发 → Settings/Edit
在 TLS certificate / Custom SSL certificate 处选择刚签发的 us-east-1 证书 → 保存。
Step 3:在 CloudFront 添加新域名(Alternate domain names / CNAMEs)
CloudFront → 分发 → Settings/Edit
在 Alternate domain names (CNAMEs) 中新增:
greasyfork.xxx.com(或你的新域名)
保存(若证书已覆盖则可成功保存)。
Step 4:Route53 将新域名指向 CloudFront(Alias)
Route53 → Hosted zone → 找到或创建记录:
- 记录名:
greasyfork(即greasyfork.xxx.com) - 类型:A
- Alias:开启
- Alias target:选择该 CloudFront 分发(此时下拉应能选到)
保存。
四、验证方案(最小验证)
1)DNS 验证(强制用公共 DNS)
powershell
nslookup greasyfork.xxx.com 8.8.8.8
预期:返回 CloudFront 的 IP 段(通常为 54.x / 13.x 等)。
2)HTTPS 头请求验证
powershell
iwr https://greasyfork.xxx.com -Method Head -TimeoutSec 10
预期:200/301 等正常响应(不应出现证书错误)。
五、结论(牢记两句)
- Route53 选不到 CloudFront :因为 CloudFront 分发 没添加该域名(CNAMEs)。
- CloudFront 保存报错 :因为分发绑定的 SSL 证书没覆盖该域名 ,需在 ACM us-east-1 申请/更新证书后再添加。