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
系统公告

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

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