我家里有一台服务器,通过我的 OpenWRT 路由器使用动态域名 (mydomain.ddns.net)。现在我想托管一个网站,我在 GoDaddy 购买了一个域名 (www.mynewdomain.com),并设置了带屏蔽的 301 重定向(这样人们就会一直看到 www.mynewdomain.com,而不是 mydomain.ddns.net)。
问题是,当我运行“sudo certbot --nginx”命令时,它可以验证 mydomain.ddns.net,但不能验证 www.mynewdomain.com,因为“客户端缺乏足够的授权::来自 www.mynewdomain.com/.well-known/acme-challenge 的无效响应...”
我一直在搜索和尝试不同的东西,其中大多数与这段代码有关:
location ~ /.well-known {
default_type "text/plain";
root /var/www/html;
}
但它不起作用。可能是因为这些解决方案没有考虑到我处于 301 重定向掩码之下。有人能帮我吗?提前谢谢。
答案1
有些事情在情况表述中没有解释清楚,所以我将尝试解释应该如何做,然后您可以随意进一步询问或告诉我更多细节,以便我可以解释。
- 在 GoDaddy 上,您也有一台使用 nginx 的服务器?如果是这样,对于域,
www.mynewdomain.com
最好是在域指向的地方获取证书。如果不对 DNS 或 HTTP 内容进行一些“特殊更改”,Let's Encrypt 就无法为与域指向不同的服务器颁发证书。这是出于安全原因。如果您需要在服务器 A 上为服务器 B 生成证书,那么您需要使用手动模式。手动操作的缺点是所有工作都必须由您自己完成。 如果您在 GoDaddy 没有服务器,请说明,如果我碰巧知道,我会回复您。要在家中为 GoDaddy 颁发 SSL,您可以执行以下操作:
certbot -d mynewdomain.com --manual --preferred-challenges dns certonly
然后它会给你一个像这样的输出
Please deploy a DNS TXT record under the name
_acme-challenge.mynewdomain.com with the following value:
IzH_mRZS7DsUxW1UdWjVWihMetUoLEROLHnGzHnTJ34
Before continuing, verify the record is deployed.
然后在 DNS 上创建记录:
_acme-challenge.mynewdomain.com 300 IN TXT "IzH_mRZS7DsUxW1UdWjVWihMetUoLEROLHnGzHnTJ34"
这将允许您生成证书文件。该文件应上传到 GoDaddy 的设备。如果 GoDaddy 应用程序不支持 SSL 终止,则您需要不同的解决方案。
- 另一个问题是如何将请求传递到
mydomain.ddns.net
服务器。如果您确实通过 http 传递请求,则不会出现问题,但人们可以或多或少轻松地通过中间人攻击您。因此,如果安全性至关重要,请不要使用此方法,除非您在家中到 GoDaddy 服务器之间有某种形式的 VPN。如果您想将 https 传递到后端(mydomain.ddns.net
),那么您还有另一个问题需要解决,因为您已经在 上解压了 httpswww.mynewdomain.com
。您这里需要的是“上游 SSL”,您可以检查本文档。
我刚刚写的内容没有具体解释配置等细节,因为我需要更多关于情况和你真正想要的东西的细节。我希望这能有所帮助,但如果这不是你想要的,请更详细地解释你所拥有的设置。不同的端点是什么,当前的配置,你想如何设置它(哪里必须是 ssl,哪里不是),等等。