零基础搞定Traefik反向代理容器集群配置

Traefik 是一款现代反向代理与负载均衡工具,天然支持 Docker 容器自动发现。
很多朋友想用 Traefik 搭建容器集群的反向代理层,但面对一堆配置容易懵圈。
本文从零开始,用最直接的方式带你完成 Traefik 反向代理容器集群配置,每一步都附命令和配置文件,跟着操作就行。

动手前需要准备什么

  • 一台装有 Docker 和 docker-compose 的 Linux 服务器(本文以 Ubuntu 22.04 为例)。
  • 一个已经解析到服务器 IP 的域名(比如 traefik.example.com)。
  • 开放服务器防火墙的 80 和 443 端口。
  • 确保 Docker 服务运行正常:systemctl status docker

为了测试集群效果,我们会用两个简单的 Nginx 容器作为后端服务,再用一个 Traefik 容器做反向代理入口。

配置 Traefik 反向代理集群的完整步骤

1. 创建项目目录及配置文件

在服务器上执行:

mkdir -p ~/traefik-cluster && cd ~/traefik-cluster

新建 docker-compose.yml 文件:

version: '3'

services:
  traefik:
    image: traefik:v3.1
    container_name: traefik
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencrypt.acme.email=your-email@example.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=./acme.json"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./acme.json:/acme.json"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)"
      - "traefik.http.routers.dashboard.service=api@internal"
      - "traefik.http.routers.dashboard.middlewares=auth"
      - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxxxxxxxxxxxxxx"
    networks:
      - traefik-net

  app1:
    image: nginx:alpine
    container_name: app1
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.services.app.loadbalancer.server.port=80"
      - "traefik.http.services.app.loadbalancer.sticky.cookie=true"
    networks:
      - traefik-net

  app2:
    image: nginx:alpine
    container_name: app2
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`app.example.com`)"
      - "traefik.http.services.app.loadbalancer.server.port=80"
      - "traefik.http.services.app.loadbalancer.sticky.cookie=true"
    networks:
      - traefik-net

networks:
  traefik-net:
    driver: bridge
注意:将 your-email@example.com 替换为自己的邮箱,traefik.example.com 替换为实际域名,并先生成 acme.json 文件(权限设为 600)

2. 初始化 acme.json 和密码

touch acme.json
chmod 600 acme.json

生成 Dashboard 的密码(使用 htpasswd 或在线工具),
将输出的加密字符串替换上面配置文件中的 $$apr1$$xxxxxxxxxxxxxxx 部分(注意 docker-compose 中 $ 需要转义为 $$)。

3. 启动集群

~/traefik-cluster 目录下执行:

docker-compose up -d

等待几秒后,用 docker ps 查看三个容器是否都运行。

新手容易踩的坑

  • acme.json 权限不对:LetsEncrypt 证书要求该文件权限不能高于 600,否则 Traefik 启动会报 permission denied。务必执行 chmod 600 acme.json
  • Dashboard 密码配置错误:因为 docker-compose.yml 里用了 $$ 转义,如果直接复制明文密码,会报 middleware auth error。建议先在外壳用 echo $(htpasswd -nb admin 你的密码) 获得完整字符串,再手动将 $ 替换为 $$
  • 后端服务标签重复:两个 app 容器使用相同的路由规则 Host(app.example.com) 和相同的服务名 app,这是正确的——Traefik 会自动合并为集群。但注意 不要在不同服务上使用相同路由规则却不同服务名,否则路由冲突。
  • 网络问题:所有容器必须在同一个自定义网络中(本例为 traefik-net),否则 Traefik 无法发现后端。

如何验证配置是否成功

  1. 检查容器日志
   docker logs traefik --tail 20

应看到类似 StartedAdding route on app 的输出。

  1. 访问 Dashboard

浏览器打开 https://traefik.example.com(记得先解析 DNS),输入配置的账号密码,能看到仪表盘里显示两个 HTTP 路由器和服务。

  1. 测试反向代理集群

在本地编辑 hosts(或直接用域名访问 http:
//app.example.com
),
多次刷新页面,
验证 Nginx 默认页来自不同的后端容器(可通过修改 Nginx 默认 index.html 加入主机名来区分)。

  1. HTTPS 自动证书

访问 https://app.example.com,检查证书是否为 Let's Encrypt 颁发,并显示证书有效。

以上步骤完成后,你就拥有了一套带自动 HTTPS 的 Traefik 反向代理容器集群。
日常维护只需修改 docker-compose.yml 增减服务,Traefik 会自动感知更新。
遇到其他问题,优先看容器日志和中途提到的避坑点。

分享到:
上一篇
Podman替代Docker使用教程:零基础迁移与实战指南
下一篇
Harbor私有镜像仓库高可用搭建指南:零基础实现双节点容灾
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意