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

启用TLS的Traefik反向代理上传性能骤降,求排查方案

Traefik启用TLS后上传速度暴跌的排查与解决

核心问题

  • 硬件配置:16核AMD Epyc 7281(支持硬件AES加密)、32GB内存、10Gb网络
  • 测速对比:
    • VPN直连Librespeed容器(HTTP):150Mbps上传 / 300Mbps下载
    • 经Traefik公网HTTPS访问:100Mbps下载 / 20Mbps上传(上传降幅超10倍)
  • 疑问:该表现是否为Traefik正常性能?是否存在配置问题?

用户提供的Docker Compose配置

services:
  traefik:
    image: traefik:v2.9.6
    container_name: traefik
    restart: unless-stopped
    networks:
      - outbound
      - internal
    command:
      - "--serversTransport.insecureSkipVerify=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker=true"
      - "--providers.docker.watch"
      - "--providers.docker.network=outbound"
      - "--providers.docker.swarmMode=false"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.https.address=:443"
      - "--entryPoints.traefik.address=:8888"
      - "--entrypoints.http.http.redirections.entryPoint.to=https"
      - "--entrypoints.http.http.redirections.entryPoint.scheme=https"
      - "--providers.file.directory=/rules"
      - "--providers.file.watch=true"
      - "--api.insecure=true"
      - "--accessLog=true"
      - "--accessLog.filePath=/traefik.log"
      - "--accessLog.bufferingSize=100"
      - "--accessLog.filters.statusCodes=400-499"
      - "--metrics"
      - "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
      #- "--log.level=DEBUG"
      - "--certificatesResolvers.myresolver.acme.caServer=https://acme-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myresolver.acme.storage=acme.json"
      - "--certificatesResolvers.myresolver.acme.httpChallenge.entryPoint=http"
      - "--certificatesResolvers.myresolver.acme.tlsChallenge=true"
      - "--certificatesResolvers.myresolver.acme.email=asd@asd.me"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./traefik/acme.json:/acme.json
      - ./traefik/traefik.log:/traefik.log
      - ./traefik/rules:/rules
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - "80:80"
      - "443:443"
      - "8888:8888"
  librespeed:
    image: adolfintel/speedtest
    container_name: librespeed
    environment:
      - MODE=standalone
    networks:
      - outbound
    ports:
      - 8080:80
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.librespeed.rule=Host(`s.mydomain.com`)"
      - "traefik.http.services.librespeed.loadbalancer.server.port=80"
      - "traefik.http.routers.librespeed.entrypoints=https,http"
      - "traefik.http.routers.librespeed.tls=true"
      - "traefik.http.routers.librespeed.tls.certresolver=myresolver"

排查与解决建议

这种10倍的上传降幅绝对不是Traefik的正常性能,你的硬件配置完全能支撑远超当前的TLS吞吐量,大概率是配置或环境优化不到位,按以下优先级排查:

1. 强制启用TLS 1.3与硬件加速套件

虽然CPU支持AES-NI,但Traefik默认可能未最大化利用硬件加速,需明确指定TLS版本和高效加密套件:
在Traefik的command中添加:

- "--entrypoints.https.http.tls.options.default.minVersion=VersionTLS13"
- "--entrypoints.https.http.tls.options.default.cipherSuites=TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256,TLS_AES_128_GCM_SHA256"
- "--entrypoints.https.http.tls.options.default.preferServerCipherSuites=true"

TLS 1.3相比1.2大幅降低握手开销,且上述套件能直接利用AES-NI硬件加速,降低CPU占用。

2. 优化Docker网络模式

自定义bridge网络的转发性能可能成为瓶颈,尝试两种优化方式:

  • 切换为host网络模式:直接使用宿主机网络,消除Docker端口转发的额外开销(需注释原networks和ports配置):
    network_mode: host
    # networks:
    #   - outbound
    #   - internal
    # ports:
    #   - "80:80"
    #   - "443:443"
    #   - "8888:8888"
    
  • 优化bridge网络参数:若保留bridge模式,确保宿主机开启IP转发并调整网络缓冲:
    在宿主机执行:
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    sysctl -p
    

3. 排查日志IO瓶颈

开启accessLog并写入文件可能因磁盘IO拖慢性能,尤其是上传时的高频请求:

  • 临时注释accessLog配置测试:
    # - "--accessLog=true"
    # - "--accessLog.filePath=/traefik.log"
    # - "--accessLog.bufferingSize=100"
    # - "--accessLog.filters.statusCodes=400-499"
    
    若速度恢复,说明磁盘IO是瓶颈,可增大bufferingSize(如1000)或改用syslog输出日志。

4. 宿主机TCP参数优化

针对10Gb网络,调整宿主机TCP缓冲和连接参数:
在/etc/sysctl.conf添加:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 10000

执行sysctl -p生效后重新测速。

5. 简化证书Resolver配置

同时启用httpChallenge和tlsChallenge可能存在额外逻辑开销,可临时注释tlsChallenge测试:

# - "--certificatesResolvers.myresolver.acme.tlsChallenge=true"

总结

你的硬件配置完全能支撑10Gbps级别的TLS转发,优先从TLS硬件加速和Docker网络模式入手排查,这两个是最可能导致大幅性能下降的点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:35:27