· 16 мин чтения

Traefik: reverse proxy для Docker и микросервисов

Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет админской практики на клиентских серверах у меня было всё: nginx с ручной выдачей сертификатов, HAProxy со сложными конфигами, Apache с mod_proxy. Когда инфраструктура переехала в контейнеры, я полностью перешёл на Traefik. Он сам обнаруживает сервисы, сам получает SSL, сам обновляет маршруты. В итоге — меньше YAML в Git, меньше боли на продакшене.

Ключевые концепции

ПонятиеОписание
EntryPointПорт, который слушает Traefik: web (80), websecure (443), tcp-mqtt (1883)
RouterПравило маршрутизации: Host, Path, Headers
ServiceКуда проксирует: контейнер, группа контейнеров, внешний URL
MiddlewareОбработка: basicauth, redirect, rate-limit, compress
ProviderИсточник конфигурации: Docker, File, Kubernetes, Consul

Базовый docker-compose

services:
  traefik:
    image: traefik:v3.1
    command:
      - --api.dashboard=true
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.email=boss@itfresh.ru
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
      - --certificatesresolvers.le.acme.tlschallenge=true
      - --log.level=INFO
      - --accesslog=true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt
    labels:
      - traefik.enable=true
      - traefik.http.routers.dashboard.rule=Host(`traefik.itfresh.ru`)
      - traefik.http.routers.dashboard.entrypoints=websecure
      - traefik.http.routers.dashboard.tls.certresolver=le
      - traefik.http.routers.dashboard.service=api@internal
      - traefik.http.routers.dashboard.middlewares=auth
      - traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$xxx$$yyy
    restart: unless-stopped
    networks: [ edge ]

networks:
  edge:
    external: true

Подключение сервиса

services:
  portal:
    image: itfresh/portal:latest
    networks: [ edge ]
    labels:
      - traefik.enable=true
      - traefik.http.routers.portal.rule=Host(`portal.itfresh.ru`)
      - traefik.http.routers.portal.entrypoints=websecure
      - traefik.http.routers.portal.tls.certresolver=le
      - traefik.http.services.portal.loadbalancer.server.port=8080
      - traefik.http.routers.portal.middlewares=compress,rate-limit
      - traefik.http.middlewares.compress.compress=true
      - traefik.http.middlewares.rate-limit.ratelimit.average=100
      - traefik.http.middlewares.rate-limit.ratelimit.burst=200

DNS-01 для wildcard

Если нужен сертификат *.corp.itfresh.ru — TLS challenge не подойдёт. Настраиваем DNS-01 через Cloudflare API:

environment:
  - CF_DNS_API_TOKEN=xxx_cloudflare_token
command:
  - --certificatesresolvers.le.acme.dnschallenge=true
  - --certificatesresolvers.le.acme.dnschallenge.provider=cloudflare
  - --certificatesresolvers.le.acme.email=boss@itfresh.ru
  - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json

# В labels
- traefik.http.routers.api.tls.domains[0].main=corp.itfresh.ru
- traefik.http.routers.api.tls.domains[0].sans=*.corp.itfresh.ru

Middleware: частые полезные

- traefik.http.middlewares.security.headers.stsSeconds=31536000
- traefik.http.middlewares.security.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.security.headers.contentTypeNosniff=true
- traefik.http.middlewares.security.headers.browserXssFilter=true
- traefik.http.middlewares.ipoffice.ipwhitelist.sourcerange=10.0.0.0/16,203.0.113.0/24

File provider для внешних сервисов

Не всё крутится в Docker. Для легаси-серверов используем file provider:

# /etc/traefik/dynamic.yaml
http:
  routers:
    legacy:
      rule: "Host(`legacy.itfresh.ru`)"
      service: legacy-svc
      entrypoints: [ websecure ]
      tls: { certResolver: le }
  services:
    legacy-svc:
      loadBalancer:
        servers:
          - url: "http://10.0.5.12:8080"
          - url: "http://10.0.5.13:8080"
        healthCheck:
          path: "/health"
          interval: 10s

Дашборд и метрики

Дашборд Traefik показывает маршрутизаторы, сервисы и middleware. Для мониторинга включаем Prometheus endpoint:

command:
  - --metrics.prometheus=true
  - --metrics.prometheus.entrypoint=metrics
  - --entrypoints.metrics.address=:8082

Дальше — стандартный Grafana-дашборд ID 4475 Traefik 2.

Мини-кейс: SaaS с 18 микросервисами

В сентябре 2025 года к нам пришёл SaaS-стартап: 18 Docker-контейнеров на одном Dell Xeon Platinum 8280 (40 ядер) в дата-центре МТС, nginx+certbot на фронтенде, ручные правки конфигов, каждая выкатка — 20 минут стресса. За 2 рабочих дня мы мигрировали на Traefik v3: docker-compose с labels на каждом сервисе, DNS-01 через Cloudflare для wildcard сертификата, middleware security-headers, basicauth на дашборде. После миграции: 0 минут простоя на выкатке нового сервиса (label — и он доступен), 3-кратное уменьшение YAML-конфигов, автоматический SSL для любого нового поддомена. Стоимость миграции — 58 000 руб., окупилась за месяц экономии времени девопса.

Балансировка TCP и UDP

- traefik.tcp.routers.mqtt.rule=HostSNI(`*`)
- traefik.tcp.routers.mqtt.entrypoints=mqtt
- traefik.tcp.services.mqtt.loadbalancer.server.port=1883

# EntryPoint
- --entrypoints.mqtt.address=:1883

Типичные ошибки

Настроим Traefik под вашу Docker-инфраструктуру

Миграция с nginx, автоматический SSL, middleware-пайплайны, дашборд с SSO, мониторинг в Prometheus. От 45 000 руб. за площадку до 20 сервисов.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы о Traefik

Чем Traefik лучше nginx?
Автоматическое обнаружение контейнеров через labels, встроенный Let's Encrypt, дашборд, middleware pipeline.
Работает ли Traefik с обычными серверами, не Docker?
Да, через file provider с YAML или TOML описанием.
Как защитить дашборд Traefik?
Через middleware basicauth или forwardauth (Authelia, Authentik).
Можно ли балансировать TCP/UDP?
Да, Traefik v3 поддерживает TCP, UDP и HTTP одновременно.
Сколько RPS держит один Traefik?
На 4 vCPU обычного сервера — до 30 000 HTTPS RPS.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.