启用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配置测试:
若速度恢复,说明磁盘IO是瓶颈,可增大# - "--accessLog=true" # - "--accessLog.filePath=/traefik.log" # - "--accessLog.bufferingSize=100" # - "--accessLog.filters.statusCodes=400-499"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
相关产品推荐
相关产品推荐

