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

当你用Docker运行多个网站(比如博客、企业站、API服务),每个容器都要暴露一个端口,管理起来很麻烦。
Traefik就是专门解决这个问题的反向代理工具:它能自动发现你启动的容器,根据标签生成路由规则,还能自动申请和续签Let's Encrypt HTTPS证书。
本文一步步带你实现Traefik反向代理容器多站点统一入口,所有操作都在一台服务器上完成。

准备工作:环境和域名

  • 一台安装了Docker和Docker Compose的Linux服务器(推荐Ubuntu 20.04以上)。
  • 至少一个域名(比如 example.com),并把它解析到服务器IP。
  • 两个测试用的子域名:app1.example.comapp2.example.com,也解析到同一个IP。
  • 确保服务器80和443端口没有被其他程序占用。

用Docker Compose启动Traefik

在你的服务器上创建一个目录,比如 ~/traefik,里面新建 docker-compose.yml,写入以下内容:

version: '3'

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./traefik.yml:/traefik.yml
      - ./acme.json:/acme.json
    networks:
      - web

networks:
  web:
    external: true

注意:这里把Docker socket挂载进去,Traefik才能监听容器启动事件。
还需要创建一个名为 web 的overlay网络(后面所有服务都连到这个网络)。

创建网络命令:docker network create web

接着创建 traefik.yml 配置文件:

api:
  dashboard: true
  insecure: false

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      email: you@example.com
      storage: /acme.json
      httpChallenge:
        entryPoint: web

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

同时创建一个空文件 acme.json 并设置600权限:touch acme.json && chmod 600 acme.json

启动Traefik:docker-compose up -d

添加第一个站点:Nginx静态页

~/traefik 同级目录下新建 app1 文件夹,里面创建 docker-compose.yml

version: '3'

services:
  app1:
    image: nginx:alpine
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app1.rule=Host(`app1.example.com`)"
      - "traefik.http.routers.app1.entrypoints=websecure"
      - "traefik.http.routers.app1.tls.certresolver=letsencrypt"
      - "traefik.http.services.app1.loadbalancer.server.port=80"
    networks:
      - web

networks:
  web:
    external: true

app1 目录下执行 docker-compose up -d
Traefik会自动发现这个容器,并为 app1.example.com 生成路由,同时向Let's Encrypt申请证书。
几分钟后,访问 https://app1.example.com 就能看到Nginx默认页面。

添加第二个站点:WordPress

用同样的方式部署WordPress,只需修改域名标签。
app2 目录下配置WordPress的 docker-compose,标签改为:

- "traefik.http.routers.app2.rule=Host(`app2.example.com`)"
- "traefik.http.routers.app2.entrypoints=websecure"
- "traefik.http.routers.app2.tls.certresolver=letsencrypt"
- "traefik.http.services.app2.loadbalancer.server.port=80"

启动后,https://app2.example.com 也能正常访问。
所有站点的HTTPS证书都由Traefik统一管理,无需单独配置。

常见问题与避坑说明

  • Dashboard安全:上面未开启Dashboard外部访问(insecure: false),建议通过内网或增加认证访问。如需开放,可添加一个带Basic Auth的路由。
  • 证书申请失败:检查域名解析是否生效,80端口是否可公网访问。Let's Encrypt的HTTP验证需要能访问到 /.well-known/acme-challenge/
  • 容器未显示在路由中:确保容器标签 traefik.enable=true 且网络是 web。另外Traefik默认不会暴露未被明确enable的容器。
  • 端口冲突:如果服务器上已有Nginx或Apache占用了80/443,请先停止它们,或修改Traefik的端口映射。

效果验证

访问 http://app1.example.com 会自动跳转到HTTPS。
查看Traefik Dashboard(通过SSH隧道或内网访问 http://localhost:8080)能看到两个路由都显示为绿色,证书信息正常。

至此,你已搭建好Traefik反向代理容器多站点统一入口。
以后新增站点只需写一个带标签的docker-compose文件,启动后Traefik自动接入,省去手动配置Nginx的繁琐。
遇到异常时,先回到本文的避坑部分排查,大部分问题都能解决。

分享到:
上一篇
私有Harbor镜像仓库内网高速拉取镜像的完整教程
下一篇
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意