// Engineering Log
Прокси-серверы: Часть 8 — Traefik
Опубликовано 22.09.2026
// Быстрый маршрут
Эта статья относится к теме Деплой и стабильная работа.
Traefik (произносится «трафик») — обратный прокси и балансировщик нагрузки, который берёт маршруты не из статического файла, а из окружения: из Docker, Kubernetes, файлов или систем обнаружения сервисов. Запустили контейнер с нужными метками — Traefik сам создал для него маршрут и получил сертификат. Остановили — маршрут исчез.
Проект написан на Go, распространяется под лицензией MIT; актуальная версия на сентябрь 2026 года — v3.7.13 (04.09.2026).
Как устроен Traefik
Конфигурация Traefik делится на две части.
- Статическая задаётся при запуске (ключами командной строки, файлом или переменными окружения): на каких портах принимать трафик (entry points), откуда брать маршруты (providers), как получать сертификаты (certificate resolvers). Чтобы её изменить, Traefik перезапускают.
- Динамическая приходит от провайдеров и меняется на лету: маршрутизаторы (routers) с правилами вроде
Host(`app.example.ru`)илиPathPrefix(`/api`), сервисы (services) — куда отправлять запрос, и промежуточные обработчики (middlewares) — авторизация, заголовки, перенаправления, ограничение частоты запросов.
Цепочка простая: запрос приходит на entry point, подходящий router выбирает service, по пути его обрабатывают middlewares.
Рабочий пример: Traefik и приложение в Docker Compose
Ниже — полная конфигурация: Traefik принимает HTTP и HTTPS, перенаправляет HTTP на HTTPS, получает сертификат Let’s Encrypt через проверку HTTP-01 и публикует тестовое приложение whoami по адресу app.example.ru.
services:
traefik:
image: traefik:v3.7
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entryPoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.le.acme.email=admin@example.ru"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
restart: unless-stopped
app:
image: traefik/whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`app.example.ru`)"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.routers.app.tls.certresolver=le"
- "traefik.http.services.app.loadbalancer.server.port=80"Что здесь важно:
exposedbydefault=false— Traefik публикует только контейнеры с меткойtraefik.enable=true. Без этого наружу попадут все контейнеры на сервере, включая базы данных с открытыми портами.- Перенаправление с
webнаwebsecureсовместимо с проверкой HTTP-01: по документации Traefik запросы проверки проходят на порт 80 и при включённом перенаправлении. acme.json— файл, где Traefik хранит полученные сертификаты. Он должен лежать в томе, иначе после пересоздания контейнера сертификаты будут запрашиваться заново.loadbalancer.server.portуказывает порт внутри контейнера приложения. Публиковать этот порт черезportsне нужно: трафик идёт по внутренней сети Docker.
Чтобы добавить второй сервис, достаточно описать его с такими же метками и своим правилом Host — конфигурацию самого Traefik трогать не придётся.
Middlewares: авторизация, заголовки, ограничения
Middlewares подключаются метками. Пример — закрыть служебный сервис паролем:
labels:
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$..."
- "traefik.http.routers.admin.middlewares=auth"Хеш пароля готовят утилитой htpasswd; знаки $ в docker-compose нужно удваивать, иначе Compose примет их за переменные. Из готовых middlewares чаще всего используют BasicAuth, Headers (заголовки безопасности), RedirectScheme, StripPrefix и RateLimit.
Панель управления
Traefik показывает текущие маршруты, сервисы и ошибки в веб-панели (--api.dashboard=true). Открывать её нужно через отдельный маршрутизатор с авторизацией и HTTPS. Режим --api.insecure=true публикует панель без защиты и годится только для локальных экспериментов.
Traefik в Kubernetes
В Kubernetes Traefik работает как ingress-контроллер: читает стандартные объекты Ingress, собственные ресурсы IngressRoute и Gateway API. Логика та же — маршруты появляются вместе с сервисами, сертификаты выпускает тот же механизм certificate resolvers.
Типичные ошибки
- Нет
exposedbydefault=false. Traefik публикует всё подряд, в том числе служебные контейнеры. - Контейнер в другой сети. Если приложение и Traefik не в общей сети Docker, маршрут появится, но запросы будут падать с ошибкой 502. Держите их в одной сети или укажите её в
--providers.docker.network. - Закрыт порт 80. Проверка HTTP-01 идёт на порт 80; без него сертификат не выпустится.
- Сокет Docker без ограничений. Доступ к
/var/run/docker.sockравен правам root на хосте. Монтируйте его только для чтения, а в чувствительных средах ставьте между Traefik и Docker прокси для сокета с ограниченным набором методов API. - Одинарные
$в хеше пароля. Compose подставит вместо них пустые переменные, и авторизация перестанет работать. - Открытая панель.
api.insecure=trueна сервере в интернете — прямой доступ к схеме вашей инфраструктуры.
Когда выбирать Traefik
Traefik оправдан там, где сервисы часто появляются и исчезают: Docker-хосты с десятком контейнеров, среды для веток разработки, Kubernetes. Для нескольких постоянных сайтов на VPS проще Caddy, для сложной балансировки и TCP — HAProxy. Traefik не раздаёт статические файлы сам, поэтому сайт на обычных файлах всё равно придётся отдавать отдельным веб-сервером. Сравнение всех пяти серверов — в статье «Caddy vs. Traefik vs. HAProxy vs. Nginx vs. Apache».
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Деплой и стабильная работа
Docker, CI/CD, релизы, мониторинг, observability и разбор инцидентов.
Часто с этим приходят
- Настроить деплой без ручных действий и хаоса
- Подключить мониторинг, алерты и базовую observability
- Разобрать инциденты и стабилизировать production
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Reviews
Отзывы по теме
Михаил - великолепный исполнитель! Чувствуется, что человек с огромным опытом. Работа была сделано четко, в срок. Пришлось повозиться из-за неидеальности проекта, который устанавливали на сервер, но Михаил внимательно и вдумчиво подсказывал как и что сделать. В итоге все заработало! Всем рекомендую для кого, важно качество работы!
Михаил - великолепный исполнитель! Чувствуется, что человек с огромным опытом. Работа была сделано четко, в срок. Пришлось повозиться из-за неидеальности проекта, который устанавливали на сервер, но Михаил внимательно и …
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related