You need to enable JavaScript to run this app. Traefik2.2.1配DigitalOcean的Let's Encrypt SSL证书报400超时求助
优惠活动
大模型
产品
解决方案
定价
更多

Traefik2.2.1配DigitalOcean的Let's Encrypt SSL证书报400超时求助

Traefik环境下主/子域名Let's Encrypt证书配置故障排查

基础环境说明

  • 域名购置渠道:Namecheap,域名为spin360.digital
  • 服务器部署:DigitalOcean Droplet,Ubuntu 20.04系统,Docker 19.03.12运行Node应用
  • 已生效历史配置:2020年成功为api.spin360.digital申请Let's Encrypt证书,证书存储于Droplet本地acme.json文件,该域名HTTPS访问正常、证书受浏览器信任
  • 本次目标:为新增的shopify.spin360.digital、bigcom.spin360.digital子域名配置HTTPS证书
  • 运行版本:Traefik 2.2.1、Node.js 12
  • 故障现象:Traefik启动后无法正常申请证书,日志报错400 :: urn:ietf:params:acme:error:connection :: Timeout during connect (likely firewall problem),反复重启触发Let's Encrypt速率限制,提示too many failed authorizations recently

现有配置明细

DigitalOcean DNS记录

A   spin360.digital | 指向xxx.xx.xxx.xxx | TTL 3600
A   bigcom.spin360.digital | 指向xxx.xx.xxx.xxx | TTL 3600
A   shopify.spin360.digital | 指向xxx.xx.xxx.xxx | TTL 3600
A   api.spin360.digital | 指向xxx.xx.xxx.xxx | TTL 3600
CAA *.spin360.digital | 授权签发方:letsencrypt.org | TTL 3600
AAAA *.spin360.digital | 指向xxxx:xxxx:xxx:xx::xxx:xxx | TTL 3600
A   *.spin360.digital | 指向xxx.xx.xxx.xxx | TTL 3600
AAAA spin360.digital | 指向xxxx:xxxx:xxx:xx::xxx:xxx | TTL 3600
NS  spin360.digital | 指向ns1.digitalocean.com、ns2.digitalocean.com、ns3.digitalocean.com | TTL 1800

Traefik静态配置(traefik.toml)

logLevel = "DEBUG"

[traefikLog]
  filePath = "atraefik.log"

[accessLog]
  filePath = "access.log"

[entryPoints]
  [entryPoints.web]
    address = ":80"
  [entryPoints.web.http.redirections.entryPoint]
    to = "websecure"
    scheme = "https"
  [entryPoints.websecure]
    address = ":443"

 [api]
   dashboard = true
   debug = true

 [certificatesResolvers.lets-encrypt.acme]
   email = "a.b@gmail.com"
   storage = "acme.json"
   [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

 [providers.docker]
   watch = true
   network = "web"

 [providers.file]
   filename = "traefik_dynamic.toml"

Traefik动态配置(traefik_dynamic.toml)

[http.middlewares.simpleAuth.basicAuth]
  users = [
    "xxx:xxx"
  ]

 [http.routers.api]
   rule ="Host(`spin360.digital`,
        `monitor.spin360.digital`,`shopify.spin360.digital`,`bigcom.spin360.digital`)"
   entrypoints = ["websecure"]
   middlewares = ["simpleAuth"]
   service = "api@internal"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"
  [[http.routers.api.tls.domains]]
    main = "spin360.digital"
    sans = ["shopify.spin360.digital","bigcom.spin360.digital"]

防火墙配置

$ ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Traefik启动命令

docker run \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $PWD/traefik.toml:/traefik.toml \
  -v $PWD/traefik_dynamic.toml:/traefik_dynamic.toml \
  -v $PWD/acme.json:/acme.json \
  -p 80:80 \
  -p 443:443 \
  --network web \
  --name traefik \
  traefik:v2.2.1

故障根因与修复方案

1. DNS记录格式错误

原配置中的CAA记录存在复制残留(粘贴时附带了页面操作按钮的冗余文字Copywild),属于非法DNS记录格式,会导致Let's Encrypt校验签发授权时识别失败。需将CAA记录修正为标准格式:0 issue "letsencrypt.org",删除所有多余字符;同时删除重复配置的spin360.digital A记录,避免DNS解析冲突。

2. IPv6网络连通性问题

你为spin360.digital及通配符记录同时配置了A(IPv4)和AAAA(IPv6)记录,Let's Encrypt的验证服务器会优先尝试访问IPv6地址。若Droplet的IPv6路由未正确连通、存在网络层拦截,就会触发连接超时报错。

  • 临时验证方案:暂时删除所有AAAA记录,等待DNS生效后重试证书申请
  • 长期方案:若无需提供IPv6服务,直接删除所有AAAA记录;若需启用IPv6服务,需确认Droplet的IPv6地址配置正常、无安全组拦截

3. 动态配置规则不匹配

当前动态路由的Host规则匹配了4个域名,但TLS证书的域名字段仅定义了3个(主域名+2个待上线子域名),遗漏了monitor.spin360.digital,会导致Traefik反复触发证书申请流程。需调整规则:要么从Host匹配列表中删除暂不申请证书的域名,要么将该域名加入TLS证书的SAN列表。

4. 速率限制调试注意事项

Let's Encrypt的速率限制窗口最长为1小时,触发后需等待自动解除。调试期间需遵守以下规则避免重复触发:

  • 调试阶段切换到Let's Encrypt staging环境,不会占用正式申请的额度
  • 确保acme.json文件权限为600(仅所有者可读可写),避免Traefik读取旧状态反复发起申请
  • 先通过公网访问验证80、443端口连通性,再启动证书申请流程,不要每次改配置就反复重启Traefik

验证流程

  1. 从公网访问http://spin360.digital,确认能正常收到Traefik返回的301跳转(跳转至HTTPS),无连接超时
  2. 确认所有待申请证书的域名解析到的IPv4地址与Droplet公网IP完全一致,无解析残留
  3. 等待速率限制窗口解除后,启动Traefik查看日志,确认证书获取成功

内容的提问来源于stack exchange,提问作者Vinayak Vanarse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 07:15:04