You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Digital Ocean上Let's Encrypt证书自动续期失败求助

解决Let's Encrypt证书自动续期时acme-challenge路径响应异常的问题

核心问题分析

手动执行certbot --nginx能成功续期,但自动续期失败,本质是自动续期时的HTTP-01验证请求被Nginx的现有规则拦截,返回了网页内容而非验证字符串。手动执行时certbot会临时调整Nginx配置完成验证,但自动续期依赖预配置的规则,所以需要确保Nginx规则优先处理acme-challenge请求。


具体解决步骤

1. 调整Nginx配置,优先匹配acme-challenge路径

在Nginx的HTTP(80端口)server块最顶部添加以下规则,确保它比rewrite、反向代理等规则先生效:

server {
    listen 80;
    server_name example.com www.example.com;

    # 优先处理acme验证请求
    location /.well-known/acme-challenge/ {
        root /var/www/html; # 路径需与certbot自动续期配置的webroot一致
        default_type text/plain;
        try_files $uri =404;
    }

    # 其余请求重定向到HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}

修改后执行sudo nginx -s reload重载配置,再用curl http://example.com/.well-known/acme-challenge/test测试,若返回404而非网页内容,说明规则生效。

2. 检查certbot自动续期配置

打开/etc/letsencrypt/renewal/example.com.conf,确认以下字段:

  • 若authenticator = nginx:确保Nginx主配置中没有冲突的location规则覆盖acme-challenge路径;
  • 若authenticator = webroot:确认webroot_path的值(如/var/www/html)与Nginx配置中的root完全一致,且该目录存在、权限为www-data:www-data。

3. 测试自动续期流程

执行sudo certbot renew --dry-run模拟自动续期,根据报错信息定位问题:

  • 若仍提示“无效响应”,检查acme-challenge目录的权限:
    sudo chown -R www-data:www-data /var/www/html/.well-known
    sudo chmod -R 755 /var/www/html/.well-known
    
  • 若提示“无法写入webroot”,确认certbot进程有权限访问该目录。

4. 排查Nginx全局规则冲突

检查Nginx的全局配置(如/etc/nginx/nginx.conf或/etc/nginx/conf.d/下的通用规则),确保没有全局rewrite或location规则拦截/.well-known/acme-challenge/路径。


内容的提问来源于stack exchange,提问作者EarlyCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:06:46