Traefik反向代理从零部署教程

当你在一台服务器上运行多个Web服务时,用反向代理统一管理入口是常用做法。
Traefik相比Nginx,最大的优势是能自动发现服务并动态更新路由,尤其适合容器化环境。
本文以Docker为例,带零基础用户完成Traefik反向代理的部署与配置。

环境准备与资源清单

在开始之前,你需要准备好以下内容:

  • 一台安装了Docker和Docker Compose的Linux服务器(推荐Ubuntu 20.04或CentOS 7+)。
  • 一个可以正常解析的域名(例如 example.com),并将A记录指向服务器IP。
  • 确保服务器防火墙放行80和443端口(HTTP/HTTPS)。

如果你还没有Docker环境,可以参考官方文档快速安装。
本文使用的Traefik版本为v2.x,具体版本号请以官方最新稳定版为准。

用Docker Compose部署Traefik

创建项目目录:

mkdir ~/traefik && cd ~/traefik

在该目录下创建 docker-compose.yml 文件,内容如下:

version: '3'

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik
    restart: unless-stopped
    command:
      # 启用API和Dashboard,但后续会限制访问
      - "--api.dashboard=true"
      # 使用Docker作为服务发现提供者
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      # HTTP入口点
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      # Let's Encrypt证书配置(使用staging环境测试,稳定后改为生产)
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.email=your-email@example.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./letsencrypt:/letsencrypt"
    labels:
      # 暴露Dashboard的路由规则,后续可改为更安全的域名
      - "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"
      # 使用中间件进行简单HTTP基本认证
      - "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxxxx"  # 实际用htpasswd生成

注意替换 your-email@example.com 和 Dashboard 域名。
密码使用 htpasswd 生成后填入。

创建 letsencrypt 目录:

mkdir letsencrypt && touch letsencrypt/acme.json && chmod 600 letsencrypt/acme.json

然后启动Traefik:

docker-compose up -d

检查容器是否运行:

docker ps

看到 traefik 容器处于 Up 状态即成功。

配置反向代理规则:以Web服务为例

假设你有一个Web应用(如Nginx容器)名为 myapp,想让用户通过 https://app.example.com 访问。
你只需在其他容器的labels中声明路由即可。

docker-compose.yml 中添加:

  myapp:
    image: nginx:alpine
    container_name: myapp
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`app.example.com`)"
      - "traefik.http.routers.myapp.entrypoints=websecure"
      - "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
    # 不需要映射端口到宿主机,Traefik会通过容器网络自动接入

重启整个栈:

docker-compose up -d

Traefik会自动检测新服务,申请SSL证书并路由访问。

常见坑与避坑建议

  • 端口被占用:确保宿主机80/443未被其他程序占用(如Nginx、Apache)。
  • 证书申请失败:先使用staging环境测试,确认域名解析正确后再切换到生产环境。注意Let's Encrypt有速率限制。
  • Dashboard访问不安全:生产环境应禁止公开Dashboard,建议仅绑定内网IP或添加强密码认证。
  • Docker socket权限:挂载 /var/run/docker.sock 存在安全风险,非生产环境可接受,生产环境建议使用静态配置文件。

验证反向代理是否生效

访问 http://app.example.com 应自动跳转到 https 并显示Nginx默认页面。
查看Traefik日志:

docker logs traefik | tail -20

能看到路由匹配和证书获取的记录。
你也可以登录Dashboard(如 traefik.example.com)查看路由和Service状态。

如果你正在处理Traefik反向代理,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
后续可以进一步了解Traefik的中间件、负载均衡和蓝绿发布等高级功能。

分享到:
上一篇
Vault密钥管理入门:从安装到安全存储敏感数据
下一篇
Harbor私有镜像仓库部署实战:安装、配置与排错指南
1
系统公告

机房迁移升级通知

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