Traefik ACME HTTP-SNI-01验证超时,如何修复HTTP验证问题?
修复Traefik + Docker环境下Let's Encrypt HTTP验证超时问题
从你的日志和配置来看,Let's Encrypt验证服务器尝试通过IPv6访问你的80端口时超时,而且相同配置在Consul后端能正常运行,说明问题集中在Docker网络、IPv6配置或者acme.json权限这几个方向。这里给你几个针对性的修复方案:
1. 强制使用IPv4进行验证(快速排查)
日志里明确标注Used: *IPv6*,如果你的服务器没有配置可用的IPv6网络,或者不需要IPv6支持,可以让Traefik只监听IPv4,强制Let's Encrypt用IPv4验证:
- 修改Traefik配置里的entryPoints地址,把
:80和:443改成0.0.0.0:80和0.0.0.0:443:[entryPoints] [entryPoints.http] address = "0.0.0.0:80" [entryPoints.http.redirect] entryPoint = "https" compress = true [entryPoints.https] address = "0.0.0.0:443" [entryPoints.https.tls] - 重启Traefik容器后,再触发证书申请,看是否能成功。
2. 检查Docker网络与端口映射
因为问题仅出现在Docker后端,要确认Traefik和Dropcart的网络连通性:
- 确认Traefik容器的80/443端口正确映射到主机:启动容器时必须包含
-p 80:80 -p 443:443(Docker Compose则在ports字段配置),且主机的80端口没有被其他服务占用。 - 验证Traefik能访问Dropcart的验证路径:进入Traefik容器内部,执行
curl http://<dropcart-container-ip>/.well-known/acme-challenge/test,如果返回404以外的错误,说明容器间网络不通,需要确认两者在同一个Docker网络,或者网络配置正确。 - 检查主机防火墙:确保主机的80端口(IPv4)对外开放,iptables/ufw等防火墙规则没有拦截外部请求。
3. 修复acme.json的权限问题
acme.json文件需要严格的600权限(仅所有者可读可写),否则Traefik无法正确读写证书数据,会导致验证流程异常:
- 执行以下命令修改权限:
chmod 600 /etc/traefik/acme/acme.json chown root:root /etc/traefik/acme/acme.json - 重启Traefik容器,让权限变更生效。
4. 排除Dropcart对验证路径的拦截
有时候后端服务(比如Dropcart的Web服务器)会拦截.well-known/acme-challenge路径,导致Traefik无法响应验证请求:
- 检查Dropcart的Nginx/Apache配置,确保没有对
.well-known/acme-challenge做重定向、拦截或路由规则,必要时添加一条规则让该路径直接由Traefik处理。 - 可以临时停止Dropcart服务,手动在Traefik容器的对应目录下创建测试文件,然后从外部访问
http://domain.example.com/.well-known/acme-challenge/test,如果能正常返回内容,说明问题出在Dropcart的配置上。
5. 切换到稳定版Traefik镜像
你提到使用了Let's Encrypt rc5版本的Docker镜像,这个预览版可能存在bug,建议切换回稳定版的Traefik镜像(比如traefik:v2.10或traefik:latest),再测试证书申请流程。
内容的提问来源于stack exchange,提问作者user433205
相关产品推荐
相关产品推荐

