我在 Alpine 上的 Docker 容器中使用 Nginx。使用 Certbot 生成名为 的新证书my.domain.com-0004
。
将证书替换为mv
或cp
会导致 SSL 协议错误,并且在日志中 Nginx 无法查看该文件:
2024/04/22 08:41:34 [error] 46#46: *109 cannot load certificate "/etc/letsencrypt/live//fullchain.pem": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/etc/letsencrypt/live//fullchain.pem, r) error:10000080:BIO routines::no such file) while SSL handshaking, client: 34.32.209.4, server: 0.0.0.0:443
更换了之前的证书,一切又开始工作了。我尝试重新启动容器但没有成功。
如果您查看错误消息,您将看到
"/etc/letsencrypt/live//fullchain.pem"
它尝试加载的文件的名称。您的证书位于/etc/letsencrypt/live/$ssl_server_name/fullchain.pem
您的cert.conf
文件中。对我来说,很明显该变量$ssl_server_name
尚未设置,因此返回一个空字符串......因此它找不到您的证书,因为没有它正在查找的证书。所以我找到了问题所在。该
live
目录实际上没有文件。这些都是softlinks
/symlinks
:-0004
并且目录中没有目录archive
,因为它已重命名为-0003
. 将证书从 移动-0003
到-0004
in后archive
,live
证书symlink
是正确的,并且新证书开始按预期工作。