dehydrated定时任务报错:HTTP-01验证无效问题求助
这种验证失败的问题我碰到过好多次,大概率是Let's Encrypt的服务器没法正常访问到域名所有权验证的文件,咱们从几个核心点一步步排查:
先确认WELLKNOWN路径的实际配置
先检查dehydrated的配置文件(一般是/etc/dehydrated/config,或者你自定义的配置文件)里的WELLKNOWN变量是不是真的指向/var/www/dehydrated。直接用命令快速查看:grep WELLKNOWN /etc/dehydrated/config如果路径不对,先修正这个变量,然后手动执行一次dehydrated测试:
dehydrated -c检查Web服务器的路由映射
Let's Encrypt会访问http://你的域名/.well-known/acme-challenge/随机字符串,所以你的Web服务器(Nginx/Apache)必须把这个路径正确映射到WELLKNOWN指向的目录:- 要是用Nginx,确保配置里有类似这样的location块:
配置完重启Nginx:location ^~ /.well-known/acme-challenge/ { root /var/www/dehydrated; default_type text/plain; }systemctl restart nginx - 要是用Apache,得配置Alias或者调整DocumentRoot对应的目录权限,确保
/.well-known/acme-challenge/能被正常访问,然后重启Apache:systemctl restart apache2
- 要是用Nginx,确保配置里有类似这样的location块:
验证文件的外部可访问性
手动在WELLKNOWN目录创建一个测试文件:echo "test-content" > /var/www/dehydrated/test-file然后从外部(或者用curl模拟外部访问)打开
http://你的域名/.well-known/acme-challenge/test-file,看看能不能获取到test-content。如果访问失败,可能是这几个原因:- 目录权限问题:给目录设置正确的权限,让Web服务器用户(比如www-data)能读取:
chown -R www-data:www-data /var/www/dehydrated && chmod -R 755 /var/www/dehydrated - 防火墙/安全组限制:检查服务器的防火墙(iptables/ufw)或者云服务商的安全组,有没有开放80端口(HTTP验证必须走80端口)
- CDN/反向代理干扰:如果域名用了CDN,要确保CDN没有缓存
/.well-known/路径的内容,或者暂时关闭CDN,等验证通过再开启
- 目录权限问题:给目录设置正确的权限,让Web服务器用户(比如www-data)能读取:
排查Cron Job的运行环境
有时候手动运行dehydrated正常,但Cron执行失败——这是因为Cron的环境变量和用户shell不一样。可以查看Cron日志(比如/var/log/cron或者journalctl -u cron),看看有没有路径找不到、权限不足的错误。也可以把dehydrated的命令写全路径,比如/usr/bin/dehydrated -c,避免Cron找不到命令。手动触发验证测试
强制重新生成挑战文件,手动执行一次:dehydrated -c --force运行时留意详细输出,看具体是哪个域名的挑战失败,再针对性排查该域名的配置。
内容的提问来源于stack exchange,提问作者nsb

