Certbot SSL 证书续期失败排查与修复终极指南 (Hugo + Nginx 进阶版)

在将博客从 Hexo 迁移到 Hugo,或者变更服务器网页根目录后,Certbot 的自动续期往往会因为“路径记忆错误”或“Nginx 强制跳转拦截”而宣告失败。

本篇指南将带你彻底排查并修复这些由于环境变更引发的 SSL 续期顽疾,确保你的站点加密始终在线。

阶段一:核心修复:重定义 Webroot 路径

这是解决 404 Not Found 报错最重要的一步。 它的作用是覆盖掉 Certbot 配置文件中过时的旧路径,重新建立域名与物理目录 /var/www/blog 的正确映射。

为什么这一步最重要?

Certbot 的自动续期依赖于其内部的 .conf 配置文件。如果你手动更改了 root 目录但没有更新 Certbot 记录,它会继续在旧目录生成验证文件。通过以下命令,我们可以执行“强制纠偏”:

1
2
# 强制指定新的 webroot 路径并重新验证
certbot certonly --webroot -w /var/www/blog -d bore.vip

💡 极客提示:执行时如果询问是否替换现有证书,请务必选择 2 (Replace)。这将彻底更新 /etc/letsencrypt/renewal/bore.vip.conf 中的持久化配置。


阶段二:优化 Nginx 配置:确保验证通畅

为了防止 Nginx 全局的 HTTPS 强制跳转逻辑拦截了 Let’s Encrypt 的验证请求,我们需要调整配置文件,确保 ACME 挑战请求能直接在 80 端口被正确处理。

1. 编辑 Nginx 配置文件

使用以下命令打开对应的站点配置:

1
vi /etc/nginx/conf.d/blog.conf

2. 注入验证优先逻辑

请确保 location /.well-known/acme-challenge/ 块位于任何 ifrewrite 跳转逻辑之

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
    listen 80;
    listen [::]:80;
    root /var/www/blog;
    server_name  bore.vip www.bore.vip;

    # 【关键】优先处理验证请求,防止被下方的 HTTPS 强制跳转拦截
    location /.well-known/acme-challenge/ {
        root /var/www/blog;
        allow all;
    }

    # 处理域名跳转 (www -> non-www)
    if ($host != 'bore.vip' ) {
        rewrite ^/(.*)$ [https://bore.vip/$1](https://bore.vip/$1) permanent;
    }

    # 强制跳转 HTTPS
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }

    listen 443 ssl; # managed by Certbot

    # RSA 证书路径 (由 Certbot 自动管理)
    ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem; # managed by Certbot
}

3. 重启生效

1
nginx -t && systemctl restart nginx

阶段三:清理废弃域名 (itv.bore.vip)

如果某些子域名已经不再使用或 DNS 解析已删除,必须从 Certbot 的续期任务中将其剔除,否则它会引发全局续期失败。

1. 执行删除命令

1
certbot delete --cert-name itv.bore.vip

2. 清理 Nginx 残留

删除证书文件后,务必检查 /etc/nginx/conf.d/ 下的配置,确保没有任何 server 块再引用已删除的证书路径,避免 Nginx 因找不到 .pem 文件而启动失败。


阶段四:故障类型速查表

错误表现核心原因快速对策
404 Not Found验证文件放错了目录 (还在找旧的 /hexo)执行 certonly --webroot 重设路径
NXDOMAINDNS 记录不存在 (针对已下线的域名)执行 delete 移除无效证书记录
Timeout / RedirectNginx 跳转导致 CA 无法访问 80 端口优化 Nginx 逻辑,排除 .well-known 目录
No such authorization频繁失败导致会话锁死修复配置后运行 renew,禁止使用 --force-renewal

阶段五:最终验证与日常维护

完成所有配置后,请按以下顺序执行最后检查,确保证书链路坚不可摧:

  1. 模拟续期测试 (Dry Run)
    1
    
    certbot renew --dry-run
    
  2. 正式执行续期
    1
    
    certbot renew
    
  3. 查看当前证书状态
    1
    
    certbot certificates
    

至此,通过路径重定向、Nginx 逻辑隔离与陈旧数据清理,你的 Hugo 博客 SSL 证书续期系统已完全恢复健康!

编辑此页 | #c06d953
最近更新:--| #6e2d6da
使用 Hugo 构建 | 主题 StackJimmy 设计