我一直在研究一个 Web 应用程序,该应用程序存在于两个具有 SSL 终止的负载平衡的 DigitalOcean droplet 上(使用 DigitalOcean 负载平衡器,而不是我自己的负载平衡 droplet)。
到目前为止,流量已指向 beta.mydomain.com,其中 A 记录指向负载均衡器的 IP。负载均衡器设置为使用 Let's Encrypt 自动生成的 SSL 证书进行 SSL 终止。
问题是,我即将退出测试版,因此我想将网站的 URL 更改为另一个子域名 (chile.mydomain.com)。因此,我:
1.- 更改了我的应用程序的基本路径以使用新域(与此问题无关,但为了完整性我提到它)
2.- 为子域创建新的 A 记录,指向相同的 LB
3.- 重新配置 nginx(在和中nginx.conf
)sites-available
以监听新的子域,检查所有内容nginx -t
并重新启动。这工作正常,因为当我浏览新域时,网站实际上会响应
如果我浏览到新域,我会收到 SSL 错误(证书无效)。我认为这是因为我之前已经为基本域和子域设置了原始证书,beta
因为它可以在证书的 SAN 部分中看到:
DNS Name=beta.mydomain.com
DNS Name=mydomain.com
因此,没什么大不了的:在 LB 上重新创建 HTTP2 规则并使用新的子域,这样我就可以为新的子域获得新的证书。问题是:当我尝试执行此操作时,我收到一条错误消息,指出:
未找到 mydomain.com 域的 NS 记录。
这在之前的测试版子域中没有发生过。我也尝试为子域添加 NS 记录(指向 ns1、2 和 3.digitalocean.com),TTL 较小,现在错误显示:
未找到域的一个或多个 digitalocean 名称服务器
因此,基本上 DO 控制面板拒绝为该域名生成新证书(我从 namecheap 购买了该域名,几个月前将其指向 digitalocean,但一直没动过),尽管该域名完全托管在 digitalocean
我现在完全迷路了,花了好长一段时间才弄清楚。这让我很困惑,因为 beta 子域名从来没有自己的 NS 记录(唯一的 NS 记录是针对基础域名的)
我错过了什么?我确定这是一件非常愚蠢的事情,但我开始变得绝望了
更新
出于沮丧,我尝试启动第二个新的负载均衡器,但结果完全相同。我甚至尝试在新的 LB 中为 beta 子域设置 SSL 终止,该子域已经在第一个 LB(不是新的子域)中运行,但收到的消息完全相同。我忘了补充一点,我已经向 DigitalOcean 支持部门开具了工单,但尚未收到回复。
答案1
经过周末的大量思考和多次尝试,我终于收到了 Digital Ocean 的回复。结果发现这不是我这边的错误,而是 DO 后端的一个错误,影响了所有负载均衡器的 Let's Encrypt 证书生成(在特定 droplet 上使用 certbot 是可以的)。周日早上(东部时间)发布了修复程序,问题现已解决。