在将博客从 Hexo 迁移到 Hugo,或者变更服务器网页根目录后,Certbot 的自动续期往往会因为“路径记忆错误”或“Nginx 强制跳转拦截”而宣告失败。
本篇指南将带你彻底排查并修复这些由于环境变更引发的 SSL 续期顽疾,确保你的站点加密始终在线。
阶段一:核心修复:重定义 Webroot 路径
这是解决 404 Not Found 报错最重要的一步。 它的作用是覆盖掉 Certbot 配置文件中过时的旧路径,重新建立域名与物理目录 /var/www/blog 的正确映射。
为什么这一步最重要?
Certbot 的自动续期依赖于其内部的 .conf 配置文件。如果你手动更改了 root 目录但没有更新 Certbot 记录,它会继续在旧目录生成验证文件。通过以下命令,我们可以执行“强制纠偏”:
| |
💡 极客提示:执行时如果询问是否替换现有证书,请务必选择 2 (Replace)。这将彻底更新
/etc/letsencrypt/renewal/bore.vip.conf中的持久化配置。
阶段二:优化 Nginx 配置:确保验证通畅
为了防止 Nginx 全局的 HTTPS 强制跳转逻辑拦截了 Let’s Encrypt 的验证请求,我们需要调整配置文件,确保 ACME 挑战请求能直接在 80 端口被正确处理。
1. 编辑 Nginx 配置文件
使用以下命令打开对应的站点配置:
| |
2. 注入验证优先逻辑
请确保 location /.well-known/acme-challenge/ 块位于任何 if 或 rewrite 跳转逻辑之前:
| |
3. 重启生效
| |
阶段三:清理废弃域名 (itv.bore.vip)
如果某些子域名已经不再使用或 DNS 解析已删除,必须从 Certbot 的续期任务中将其剔除,否则它会引发全局续期失败。
1. 执行删除命令
| |
2. 清理 Nginx 残留
删除证书文件后,务必检查 /etc/nginx/conf.d/ 下的配置,确保没有任何 server 块再引用已删除的证书路径,避免 Nginx 因找不到 .pem 文件而启动失败。
阶段四:故障类型速查表
| 错误表现 | 核心原因 | 快速对策 |
|---|---|---|
| 404 Not Found | 验证文件放错了目录 (还在找旧的 /hexo) | 执行 certonly --webroot 重设路径 |
| NXDOMAIN | DNS 记录不存在 (针对已下线的域名) | 执行 delete 移除无效证书记录 |
| Timeout / Redirect | Nginx 跳转导致 CA 无法访问 80 端口 | 优化 Nginx 逻辑,排除 .well-known 目录 |
| No such authorization | 频繁失败导致会话锁死 | 修复配置后运行 renew,禁止使用 --force-renewal |
阶段五:最终验证与日常维护
完成所有配置后,请按以下顺序执行最后检查,确保证书链路坚不可摧:
- 模拟续期测试 (Dry Run):
1certbot renew --dry-run - 正式执行续期:
1certbot renew - 查看当前证书状态:
1certbot certificates
至此,通过路径重定向、Nginx 逻辑隔离与陈旧数据清理,你的 Hugo 博客 SSL 证书续期系统已完全恢复健康!