我可以确认 letsencrypt 续订失败了。我已经自托管 Discourse 很多年了,非常奇怪的是,在过去几个月里,我的续订连续两次失败。第二次是今天早上,所以我开始调查。
我追踪到了以下两个提交:
以及相关的链接行:
我认为有两个问题。
首先,return 301 https://${DISCOURSE_HOSTNAME}$request_uri; 会变成 return 301 https://<我的服务器名称> 而末尾没有 $request_uri。我在我的自托管安装以及一位朋友上周设置的自托管安装上都验证了这一点。我不明白 Discourse 模板是如何工作的,所以不知道为什么它会被删除。
其次,正如 @lessLost 所提到的,301 重定向位于 location 块之外。我认为服务器级别的重定向会覆盖所有 location 块。LetsEncrypt 在续订时使用 http。然而,任何尝试 curl -I http://YOUR_DOMAIN/.well-known/acme-challenge/test 的操作都会返回 301 重定向到 https,而不是 404(这是预期的行为;我们想要 404 而不是 301)。
我已经在我自托管的安装上手动修复了这个问题,但我预计任何更新都会覆盖我的更改。不幸的是,我不够了解模板,无法提交一个 pull request 给 @pfaffman——否则我也会这么做。
编辑补充:
我认为这是错误的——
我相当确定 LetsEncrypt 默认使用 http(出于明显的原因,如果证书过期了,它就无法续订!),但将 301 放在服务器块级别会强制所有请求 301 重定向到 https,这与此续订策略不一致。
1 个赞