You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik请求子域名证书而非通配符证书的问题排查

问题原因分析
  1. 未显式声明通配符证书生成规则:Traefik 默认不会主动生成通配符证书,只会根据路由中配置的具体子域名(如whoami.${DOMAIN})请求对应证书。若未在证书 resolver 里明确指定要覆盖主域名+通配符的域名集合,Traefik 不会触发通配符证书的申请流程。
  2. 入口点 TLS 未绑定指定 resolver:即便配置了通配符域名,若 websecure 入口点的 TLS 规则未关联到对应的证书 resolver,Traefik 仍会按默认逻辑为单个子域名生成独立证书。
  3. 旧证书缓存干扰:acme.json 中已存在的whoami.${DOMAIN}证书会被 Traefik 优先调用,导致它不会主动申请新的通配符证书。
解决方法

1. 配置证书 resolver 的域名覆盖规则

在 Traefik 静态配置(docker-compose 的command参数或独立traefik.yml)中,为 Loopia DNS resolver 添加明确的域名规则:

# docker-compose command 参数形式,追加到 Traefik 服务的 command 字段
--certificatesresolvers.le.acme.domains[0].main=${DOMAIN}
--certificatesresolvers.le.acme.domains[0].sans=*.${DOMAIN}

或traefik.yml配置形式:

certificatesResolvers:
  le:
    acme:
      email: your-email@example.com  # 替换为你的邮箱
      storage: acme.json
      dnsChallenge:
        provider: loopia
        # Loopia 认证配置,补充你的账号信息
        # config:
        #   username: your-loopia-username
        #   password: your-loopia-password
      domains:
        - main: ${DOMAIN}
          sans:
            - *.${DOMAIN}

2. 绑定入口点 TLS 到指定 resolver

让 websecure 入口点的所有请求都使用上述 resolver 生成的证书:

# docker-compose command 参数形式
--entrypoints.websecure.http.tls.resolver=le

或traefik.yml配置形式:

entryPoints:
  websecure:
    address: ":443"
    http:
      tls:
        resolver: le

3. 清理旧证书缓存

备份并删除现有acme.json文件,避免旧证书干扰新证书生成:

mv acme.json acme.json.bak

之后重启 Traefik 容器,触发通配符证书的重新申请。

4. 简化服务路由配置

确保服务(如 whoami)的路由无需单独配置 TLS 规则,通配符证书会自动匹配所有子域名:

# whoami 服务的 labels 示例
labels:
  - "traefik.http.routers.whoami.rule=Host(`whoami.${DOMAIN}`)"
  - "traefik.http.routers.whoami.entrypoints=websecure"
  - "traefik.http.routers.whoami.tls=true"

额外注意事项

  • 确认 Loopia DNS 挑战的账号信息(用户名、密码)配置正确,Traefik 需要具备修改域名 DNS 记录的权限。
  • 验证环境变量${DOMAIN}已正确加载(可通过echo ${DOMAIN}命令确认)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:06:06