这个坑值得记一笔。证书快到期了,手动执行续期脚本报验证失败,提示无法访问验证路径,网站本身访问是正常的。

真正麻烦的地方在于,几个原因的现象几乎一样。验证请求被重定向到 HTTPS,导致校验失败;前置代理或者 CDN 没有回源到这台机器;验证目录被规则拦截或者权限不对。

做一次试运行看详细报错

certbot renew --dry-run

然后确认验证路径可以访问

curl -I http://域名/.well-known/acme-challenge/test

随后检查是否有强制跳转

grep -rn 'return 301' /etc/nginx/conf.d/

末了验证放行后重新续期

certbot renew --webroot -w /var/www/html

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

别只看报错消失,验证要多做一步。试运行通过,正式续期成功,证书到期时间向后延长。

提醒一点。开了强制跳转一定要给验证路径留白名单,否则每年续期都会卡在同一处。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189