Traefik 反向代理¶
Traefik 是一个现代的、云原生的反向代理和负载均衡器,可自动发现服务并处理动态配置。
为什么选择 Traefik?¶
- 自动服务发现 - 与 Docker、Kubernetes、Consul 集成
- 动态配置 - 配置更改无需重启
- 自动 HTTPS - 开箱即用的 Let's Encrypt 集成
- 现代仪表板 - 实时监控 Web UI
- 云原生 - 为容器和微服务构建
安装¶
Docker(推荐)¶
version: '3'
services:
traefik:
image: traefik:v3.0
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
rcommerce:
image: rcommerce:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.rcommerce.rule=Host(`yourdomain.com`)"
- "traefik.http.routers.rcommerce.entrypoints=websecure"
- "traefik.http.routers.rcommerce.tls.certresolver=letsencrypt"
- "traefik.http.services.rcommerce.loadbalancer.server.port=8080"
静态配置¶
创建 /etc/traefik/traefik.yaml:
global:
checkNewVersion: false
sendAnonymousUsage: false
api:
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
exposedByDefault: false
file:
directory: /etc/traefik/dynamic
certificatesResolvers:
letsencrypt:
acme:
email: admin@yourdomain.com
storage: /etc/traefik/acme.json
tlsChallenge: {}
动态配置¶
创建 /etc/traefik/dynamic/rcommerce.yaml:
http:
routers:
rcommerce:
rule: "Host(`yourdomain.com`)"
service: rcommerce
entryPoints:
- websecure
tls:
certResolver: letsencrypt
services:
rcommerce:
loadBalancer:
servers:
- url: "http://127.0.0.1:8080"
healthCheck:
path: /health
interval: 10s
Docker 标签¶
services:
rcommerce:
image: rcommerce:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.rcommerce.rule=Host(`yourdomain.com`)"
- "traefik.http.routers.rcommerce.entrypoints=websecure"
- "traefik.http.routers.rcommerce.tls.certresolver=letsencrypt"
- "traefik.http.services.rcommerce.loadbalancer.server.port=8080"