这个坑值得记一笔。证书快到期了,手动执行续期脚本报验证失败,提示无法访问验证路径,网站本身访问是正常的。
真正麻烦的地方在于,几个原因的现象几乎一样。验证请求被重定向到 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
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
别只看报错消失,验证要多做一步。试运行通过,正式续期成功,证书到期时间向后延长。
提醒一点。开了强制跳转一定要给验证路径留白名单,否则每年续期都会卡在同一处。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。