「Traefik」一脚踢开Nginx啦
目录
记录反向代理 Traefik 使用技巧。
简介
Traefik 是一个开源的边缘路由器,常用于反向代理、负载均衡等。因为其优秀的服务发现能力,非常适合于在集群中作为大量微服务的代理。
用例
Docker Compose
家庭服务代理
配置参考苏洋博客
以 Docker Compose 方式启动 Traefik 服务,并配置自动管理 Let's Encrypt 证书。
docker-compose.ymlservices: traefik: image: traefik:v3 container_name: traefik restart: unless-stopped ports: # - "8080:8080" - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /path/to/your/certs:/certs - ./config/traefik.yml:/traefik.yml - ./config/dynamic.yml:/dynamic.yml environment: - CF_API_EMAIL=${CF_DNS_EMAIL} - CLOUDFLARE_DNS_API_TOKEN=${CF_API_TOKEN} - CLOUDFLARE_ZONE_API_TOKEN=${CF_API_TOKEN} labels: - "traefik.enable=true" deploy: resources: limits: cpus: '0.5' memory: 256M healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:8080/api/rawdata"] interval: 3s retries: 10
traefik.ymlapi: dashboard: true insecure: true # 关闭该配置无法访问仪表板,原因未知,因此停止相关端口映射来替 代 entryPoints: http: address: ":80" https: address: ":443" providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false file: filename: /dynamic.yml watch: true certificatesResolvers: le: acme: email: ${CF_DNS_EMAIL} storage: /certs/acme.json dnsChallenge: provider: cloudflare delayBeforeCheck: 30 resolvers: - "1.1.1.1:53" - "8.8.8.8:53" global: sendAnonymousUsage: false checkNewVersion: false
dynamic.ymlhttp: routers: traefik-dashboard: entryPoints: [web] rule: Host(`aio.traefik.yirami.xyz`) service: dashboard@internal traefik-dashboard-api: entryPoints: [web] rule: "Host(`aio.traefik.yirami.xyz`) && PathPrefix(`/api`)" service: api@internal traefik-dashboard-secure: entryPoints: [websecure] rule: "Host(`aio.traefik.yirami.xyz`)" service: dashboard@internal tls: certResolver: le domains: - main: aio.traefik.yirami.xyz - main: yirami.xyz sans: - "*.aio.yirami.xyz" traefik-dashboard-api-secure: entryPoints: [websecure] rule: "Host(`aio.traefik.yirami.xyz`) && PathPrefix(`/api`)" service: api@internal tls: certResolver: le nas-aio: entryPoints: - https rule: "Host(`nas.aio.yirami.xyz`)" service: nas-aio-service tls: certResolver: le services: nas-aio-service: loadBalancer: servers: - url: "http://aio.nas.yirami.xyz:19080"