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

在Caddy代理前部署Traefik反向代理遇SSL问题求助

解决Traefik TCP透传Caddy时的SSL握手失败问题

核心问题诊断

从openssl输出看,TLS握手返回fatal internal_error且无证书返回,说明Traefik未正确将TLS流量透传给Caddy,或Caddy无法识别请求的SNI域名并提供对应证书。结合配置分析,主要存在TCP路由未关联入口点、HTTP/3(UDP)路由配置不完整两个关键问题。

解决方案

1. 修正Caddy的Traefik标签配置

更新docker-compose.yml中Caddy的labels,补全TCP路由的入口点关联,以及完整配置UDP路由:

services:
  caddy:
    # ... 其他配置不变
    labels:
      traefik.docker.network: traefik
      traefik.enable: "true"
      # TCP路由配置(处理HTTPS流量)
      traefik.tcp.routers.api-v2-caddy.entrypoints: https
      traefik.tcp.routers.api-v2-caddy.rule: HostSNI(`show.api.localhost`)
      traefik.tcp.routers.api-v2-caddy.tls: "true"
      traefik.tcp.routers.api-v2-caddy.tls.passthrough: "true"
      traefik.tcp.services.api-v2-caddy.loadbalancer.server.port: "443"
      # UDP路由配置(处理HTTP/3流量)
      traefik.udp.routers.api-v2-caddy.entrypoints: http3
      traefik.udp.routers.api-v2-caddy.rule: HostSNI(`show.api.localhost`)
      traefik.udp.services.api-v2-caddy.loadbalancer.server.port: "443"
    # ... 其他配置不变
  • 给TCP路由添加entrypoints: https,确保Traefik从443端口接收TCP流量并转发
  • 补全UDP路由的rule和service配置,让Traefik将HTTP/3的UDP流量转发到Caddy的443 UDP端口

2. 验证Caddy的TLS配置

确保Caddy的Caddyfile已正确配置show.api.localhost的证书,例如:

show.api.localhost {
    tls internal # 本地开发用自签名证书,或指定证书路径
    reverse_proxy php:9000
    mercure {
        # 你的Mercure配置
    }
}

由于Traefik做TLS透传,所有TLS握手由Caddy处理,Caddy必须能识别该SNI域名并提供有效证书。

3. 检查网络与配置生效

  • 确认Traefik容器已加入traefik网络
  • 重启Traefik和Caddy容器,确保配置生效:
docker-compose down && docker-compose up -d

4. 验证HTTP/3支持

HTTP/3依赖UDP端口,确保Traefik的http3入口点配置正确,且Caddy版本为v2.6+(默认支持HTTP/3)。

验证测试

重新执行以下命令测试TLS握手:

openssl s_client -connect show.api.localhost:443 -servername show.api.localhost -msg

若握手成功,会显示Caddy返回的证书信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:54:50