我正在运行 nginx 作为反向代理,由于某种原因,我无法更新 letencrypt 证书,我尝试将 nginx 和 certbot 升级到最新版本。它之前一直有效,我不确定是否更改了某些服务器配置。
运行 certbot renew 时,我从 certbot 收到以下错误:
certbot renew --nginx --dry-run
Certbot 无法验证某些域(验证器:nginx)。证书颁发机构报告了这些问题:域:myurl 类型:未经授权 详细信息::来自 http://myurl/.well-known/acme-challenge/asdasd 的响应无效:404
提示:证书颁发机构无法验证 Certbot 所做的临时 nginx 配置更改。请确保列出的域指向此 nginx 服务器,并且可以从互联网访问它。
Nginx 错误日志示例:
2023/08/03 08:22:36 [error] 13286#13286: *32 open() "/usr/share/nginx/html/.well-known/acme-challenge/asdasd" failed (2: No such file or directory), client: ipadress, server: ipadress, request: "GET /.well-known/acme-challenge/asdasd HTTP/1.1", host: "url"
据我了解,nginx 无法提供 acme-challange 或者 certbot 正在将挑战写入 /usr/share/nginx/html 以外的其他位置...
有人能给我指明正确的方向吗?
提前致谢
更新 @symcbean 命令的输出显示“没有此文件或目录” ls -l /usr/share/nginx/html/.well-known/acme-challenge/ ls:无法访问'/usr/share/nginx/html/.well-known/acme-challenge/':没有此文件或目录
我怎么知道 cerbot 正在尝试写入 /usr/share/... 而不是其他文件夹?
nginx 站点配置的示例。
upstream beta-api {
server 10.166.0.4:8384;
}
server {
server_name betaapi.ancytree.com;
listen 80;
# set client body size to 8M #
client_max_body_size 8M;
location / {
proxy_pass http://beta-api;
include proxy_params;
}
}
答案1
您已经查看了日志 - 这是个好的开始!由于 LetsEncrypt 似乎正在访问您的网站,因此您可以排除许多与 DNS 和 HTTP 相关的问题。
您接下来应该尝试的是亲自完成 HTTP-01 挑战并看看会发生什么。
Certbot 续订将作为 cron 作业运行 - 因此需要使用相同的帐户运行:
echo "test" >/usr/share/nginx/html/.well-known/acme-challenge/asdasd
ls -l /usr/share/nginx/html/.well-known/acme-challenge/asdasd
cat /usr/share/nginx/html/.well-known/acme-challenge/asdasd
curl -I http://myurl/.well-known/acme-challenge/asdasd
如果这不能为您提供答案,请使用这些命令的输出更新您的帖子。
(可能的原因是文件权限,包括 MAC、缺少目录或 Web 服务器中文件系统和 URL 路径之间缺少映射)