Traefik反向代理统一容器多站点入口教程

Traefik 如何统一管理多个容器站点?

Traefik 是一款支持自动服务发现的反向代理工具,专门为容器环境设计。
你只需要将多个 Web 服务放在同一个 Docker 网络中,并在容器 Compose 文件中添加少量标签,Traefik 就会自动监听新服务,并为每个站点分配独立的域名或路径规则,所有流量统一通过 80/443 端口进入,避免每个容器单独暴露端口带来的混乱和管理成本。

准备工作:环境与域名

在开始配置前,需要确保以下条件已具备:

  • 一台安装了 Docker 和 Docker Compose 的云服务器(比如泽御云的云服务器,资质齐全、网络稳定,适合运行生产级的反向代理服务)。
  • 一个已经解析到服务器 IP 的域名,用于承载主要站点(例如 example.com),也可以准备多个子域名(blog.example.com、shop.example.com)。
  • 服务器防火墙放行 80、443 和 8080 端口(8080 用于 Traefik 仪表盘,可后续关闭)。

如果你使用的是云服务商,记得在安全组规则中放行这些端口。

配置 Traefik 入口与自动发现

核心思路是用 docker-compose.yml 定义 Traefik 容器和其他业务容器,
所有容器加入同一个 traefik 网络,
Traefik 通过 Docker 提供的 API 自动发现带有指定标签的容器并生成路由规则。

第一步:创建项目目录与 Compose 文件

mkdir -p ~/traefik && cd ~/traefik
nano docker-compose.yml

第二步:编写 Traefik 主容器的 Compose 配置

version: '3.8'

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    command:
      - '--api.insecure=true'           # 开启仪表盘(生产环境请关闭或加认证)
      - '--providers.docker=true'        # 启用 Docker 服务发现
      - '--providers.docker.exposedbydefault=false'  # 只暴露有标签的容器
      - '--entrypoints.web.address=:80'  # HTTP 入口
      - '--entrypoints.websecure.address=:443'  # HTTPS 入口(配合证书)
      - '--certificatesresolvers.myresolver.acme.tlschallenge=true'
      - '--certificatesresolvers.myresolver.acme.email=admin@example.com'
      - '--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json'
    ports:
      - '80:80'
      - '443:443'
      - '8080:8080'   # 仪表盘端口
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    networks:
      - traefik

networks:
  traefik:
    name: traefik
注意:/var/run/docker.sock 挂载给 Traefik 是为了让它能监听 Docker 事件。如果担心安全,可改用 docker 插件或静态配置方式,此处面向新手先演示最直观的方式。

第三步:启动一个业务容器(示例:nginx 静态站点)

在同一个 Compose 文件底部追加:

  whoami:
    image: traefik/whoami
    container_name: whoami
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.whoami.rule=Host(`whoami.example.com`)'
      - 'traefik.http.services.whoami.loadbalancer.server.port=80'
    networks:
      - traefik

这里 whoami 是一个测试用镜像,返回请求信息。
标签中的规则告诉 Traefik:当请求域名是 whoami.example.com 时,将流量转发到此容器的 80 端口。

第四步:启动所有服务

docker-compose up -d

等待片刻,Traefik 会自动解析标签并生成路由。
将域名 whoami.example.com 解析到服务器 IP,浏览器访问应该看到 whoami 的响应信息。

如果需要添加更多站点,只需复制类似的业务容器定义,修改容器名、域名标签和服务器的端口。
所有容器共享 Traefik 的 80/443 入口。

常见问题与避坑

问题1:服务启动后无法访问,提示 404 或 Bad Gateway

  • 确认域名解析正确,并指向服务器 IP。
  • 检查业务容器是否真的运行(docker ps)。
  • 检查标签中的域名是否包含多余的空格。
  • 查看 Traefik 日志:docker logs traefik,通常能直接看到路由规则和错误原因。

问题2:HTTPS 证书申请失败

Traefik 默认使用 ACME 自动申请 Let's Encrypt 证书。
常见失败原因:

  • 域名未正确解析到本机。
  • 防火墙阻止了 80 端口(ACME 验证需要)。
  • 邮箱格式错误或存储目录权限不足。
建议先暂停 HTTPS 配置,用 HTTP 确认路由正常工作后再开启证书。

问题3:Traefik Dashboard 无法访问

如果无法通过 http://服务器IP:8080 访问仪表盘,检查安全组是否放行了 8080,或者 Compose 中 api.insecure 是否设置为 true

问题4:同一台服务器上同时运行 Nginx 或 Apache 如何处理?

Traefik 必须占用 80/443 端口,因此需要先停止其他 web 服务(如 Nginx),或修改它们使用其他端口(如 8081),再让 Traefik 代理到这些端口。

验证代理效果

配置完成后可以用以下方法验证:

  1. 打开浏览器访问 http://whoami.example.com,应该显示容器返回的 HTTP 头、IP 等信息。
  2. 访问 Traefik 仪表盘 http://服务器IP:8080,在 HTTP 路由列表中可以看到 whoami 路由器及规则。
  3. 修改本地 hosts 文件(或直接用真实域名),再添加一个新站点对应的容器并重启,无需重启 Traefik,它会自动加载。

常见问题解答 (FAQ)

Q1: Traefik 和 Nginx 反向代理有什么区别?
A: Traefik 更适合容器环境,能自动发现新服务并动态更新路由,无需手动修改配置文件再 reload。Nginx 更成熟但需要手动管理配置。对于 Docker 多站点统一入口,Traefik 更加推荐。

Q2: 多个站点使用同一个端口会不会冲突?
A: 不会。Traefik 根据请求的域名(Host)或路径(Path)进行路由区分,所以多个站点可以共享 80/443 端口,这也是反向代理的核心价值。

Q3: 必须用 Docker Compose 吗?单容器如何配置?
A: 也可用 docker run 命令,但需要指定网络和标签。Docker Compose 更适合管理多服务,推荐新手使用。

Q4: Traefik 支持 WebSocket 吗?
A: 支持,默认即可代理 WebSocket 连接,无需额外配置。

如果你在配置过程中遇到其他异常,建议优先查看 Traefik 官方文档或检查容器日志。
熟练掌握 Traefik 反向代理统一容器多站点入口后,你会发现管理多个站点变得非常高效。

分享到:
上一篇
Docker镜像瘦身节省住宅主机硬盘空间
下一篇
K3s轻量集群住宅机器部署AI中转网关
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意