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

Docker部署Traefik反向代理时的重定向次数过多问题

解决Traefik仪表盘重定向次数过多的问题

直接说几个核心问题和修改方法:

1. 修正证书存储路径(最容易踩的坑)

你配置里写的证书存储路径是/acme.json,但实际挂载的目录是./letsencrypt:/letsencrypt,Traefik根本找不到证书文件,导致TLS配置异常,直接触发重定向循环。
把command里的对应行改成:

--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json

2. 替换TLS挑战为DNS挑战(适配Cloudflare代理模式)

如果Cloudflare开启了代理(橙色云朵),TLS挑战完全无效——ACME的验证请求会先到Cloudflare,无法直接到达Traefik,导致证书无法正常获取/使用,进而引发TLS错误和重定向问题。
换成Cloudflare DNS挑战,步骤如下:

  • 去Cloudflare生成API令牌(权限选「Zone:DNS:Edit」,仅给目标域名权限即可)
  • 删除原配置里的--certificatesresolvers.myresolver.acme.tlschallenge=true,替换为:
--certificatesresolvers.myresolver.acme.dnschallenge=true
--certificatesresolvers.myresolver.acme.dnschallenge.provider=cloudflare
  • 给traefik服务添加环境变量,填入你的API令牌:
environment:
  - CLOUDFLARE_DNS_API_TOKEN=你的Cloudflare API令牌

3. 调整Cloudflare SSL/TLS模式

别用「灵活」模式!改成「严格」或「完全(严格)」。
「灵活」模式下,Cloudflare与你的服务器之间用HTTP通信,而Traefik的web入口又强制重定向到HTTPS,直接形成循环:浏览器→Cloudflare(HTTPS)→Traefik(HTTP)→重定向到HTTPS→Cloudflare再转成HTTP发过来...无限重复。

4. 基础认证不要用明文(必须修改)

你现在写的USERNAME:Password12345是明文,Traefik不识别,得用加密后的哈希值。用下面的命令生成:

echo $(htpasswd -nB USERNAME) | sed -e s/\\$/\\$\\$/g

把生成的字符串替换掉标签里的明文密码。

修改后的完整配置示例

version: "3.8"

services:
  traefik:
    image: "traefik:v2.11"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.dashboard=true"
      - "--accesslog=true"
      - "--providers.docker.network=web"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entryPoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.websecure.http.tls.certresolver=myresolver"
      - "--certificatesresolvers.myresolver.acme.email=name@domain.com"
      - "--certificatesresolvers.myresolver.acme.dnschallenge=true"
      - "--certificatesresolvers.myresolver.acme.dnschallenge.provider=cloudflare"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "443:443"
      - "80:80"
    environment:
      - CLOUDFLARE_DNS_API_TOKEN=你的Cloudflare API令牌
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mydashboard.rule=Host(`subdomain.domain.net`)"
      - "traefik.http.routers.mydashboard.tls=true"
      - "traefik.http.routers.mydashboard.service=api@internal"
      - "traefik.http.routers.mydashboard.middlewares=myauth"
      - "traefik.http.middlewares.myauth.basicauth.users=USERNAME:$apr1$xxxxxx$xxxxxxxxx" # 替换成生成的哈希值
    networks:
      - web
networks:
  web:
    external: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:59:52