这是一个更新。
将此添加到 app.yml 底部的 run 部分将解决为 DISCOURSE_HOSTNAME 和 www.DISCOURSE_HOSTNAME 请求证书的问题,方法是获取 /usr/local/bin/letsencrypt。
- exec: sed -i "s|-d \\${DISCOURSE_HOSTNAME}|-d \\${DISCOURSE_HOSTNAME} -d www.\\${DISCOURSE_HOSTNAME}|g" /usr/local/bin/letsencrypt
这(不知何故?)曾经足够了,但现在当请求来自 http://www.HOSTNAME/.well-known… 时,它会被重定向到非 www 站点,而不是发送它应该发送的挑战。我尝试过这样做:
server {
listen 80;
listen [::]:80;
server_name nzarchitecture.net.nz www.nzarchitecture.net.nz;
# Serve ACME challenge (Let's Encrypt)
location ^~ /.well-known/acme-challenge/ {
root /var/www/discourse/public; # Make sure this matches your Let's Encrypt webroot
allow all;
}
# Redirect everything else to HTTPS
location / {
return 301 https://$host$request_uri;
}
}
但没有完全弄清楚。
如果团队中的任何人听到,最好有一个 letsencrypt 钩子,以便可以在 after_letsencrypt 中调用它。在 after_ssl 中进行这些更改之前是有效的,但现在似乎如果我们这样做,它会在 ssl 之后运行,但在 letsencrypt 之前运行。