Три реверс-прокси, разные модели работы

Nginx, Angie и Traefik решают одну задачу — принимают входящий трафик и направляют его к нужному бэкенду — но исходят из разных допущений о том, как устроена инфраструктура за ними.

Nginx — веб-сервер и реверс-прокси с 20-летней историей, работающий со статичным конфигурационным файлом. Список бэкендов известен заранее, конфиг пишется руками (или шаблонизируется), при изменениях — nginx -s reload.

Angie — drop-in форк Nginx, созданный той же командой инженеров, что писала его ядро. Конфиги идентичны, но добавлены встроенный ACME, JSON API и частичное автообнаружение Docker-апстримов — то есть часть болевых точек Nginx закрыта на уровне самого сервера.

Traefik — облачно-нативный реверс-прокси, спроектированный для динамической инфраструктуры. Вместо файла конфигурации он слушает Docker (а также Kubernetes и Consul, если инфраструктура на них) и сам перестраивает таблицу маршрутизации, когда контейнеры появляются или исчезают — без перезапуска и без ручного редактирования конфига.

Для типичной задачи "поднял VPS, на нём несколько Docker-контейнеров, нужен единый вход по HTTPS" — это на практике выбор между "настраиваю руками один раз", "настраиваю руками, но без боли с сертификатами" и "прокси сам следит за моими контейнерами".

Nginx — контроль и производительность

Конфигурация Nginx статична: апстримы, маршруты и сертификаты описаны в файле, изменения требуют правки конфига и reload. Это не проблема для стабильного набора сервисов, но становится рутиной, если контейнеры часто добавляются, удаляются или масштабируются.

Сильные стороны:

  • Производительность. Event-driven архитектура на C — по сей день эталон по задержке и пропускной способности среди реверс-прокси.
  • Кэширование. Встроенный слой кэширования с гибким контролем ключей кэша, TTL, правил обхода — у Traefik нативного кэширования нет вообще.
  • Экосистема модулей. Огромный набор готовых решений — от Lua-скриптинга (OpenResty) до модулей аутентификации, rate limiting, mod-security для WAF.
  • Раздача статики. Nginx — полноценный веб-сервер, может отдавать файлы напрямую, без бэкенда.

Из практических неудобств: TLS-сертификаты сам Nginx не выпускает — нужен отдельный Certbot (или аналог) плюс cron/systemd-таймер на обновление и reload после ренова.

Отдельная деталь 2022-2026 годов: после того как F5 (владелец Nginx с 2019 года) в 2022 закрыл российское подразделение из-за санкций, часть исходной команды разработчиков Nginx — включая инженеров, писавших ядро event loop и модульную систему ещё с 2011 года — покинула компанию и основала независимый форк Angie. Для этой темы стоит отдельный разбор — см. следующий раздел.

Angie — форк Nginx с фичами, которых не было даже в платной версии

Angie — не рядовой community-форк со спорадическими коммитами. Это продолжение разработки Nginx теми же людьми, что писали его ядро, только без корпоративных ограничений F5. Проект развивается компанией Web Server LLC, релизы выходят ежеквартально.

Ключевое практическое свойство: Angie — drop-in замена Nginx. Существующий nginx.conf работает без изменений, весь модульный ландшафт совместим — можно поставить Angie вместо Nginx и не переписывать ни строчки конфигурации.

Но интереснее не совместимость, а то, что Angie добавляет сверху — причём часть этого либо стоила денег в Nginx Plus, либо отсутствовала вообще:

  • Встроенный ACME-клиент. Let's Encrypt настраивается прямо в конфиге Angie, без Certbot и без отдельного cron на обновление сертификатов — ровно та боль Nginx, которую мы упоминали выше, здесь закрыта на уровне ядра. Поддерживаются HTTP-01, DNS-01 (wildcard-сертификаты) и TLS-ALPN-01.
  • JSON REST API и метрики Prometheus. Статус сервера, апстримов, зон разделяемой памяти — в структурированном виде из коробки, без сторонних экспортёров.
  • Автоматическое обновление апстримов из Docker. Angie может сам отслеживать метки на контейнерах и обновлять список бэкендов без reload — то есть закрывает именно тот разрыв с Traefik, который мы описали выше как главный недостаток классического Nginx.
  • Console Light — веб-интерфейс для визуального мониторинга сервера прямо в браузере (демо: console.angie.software).
  • HTTP/3 на клиентских и проксируемых соединениях, с возможностью независимо использовать разные версии протокола на входе и на выходе.
  • Более мелкие, но полезные вещи: session binding (все запросы одной сессии — на один и тот же бэкенд), плавное восстановление апстрима после сбоя через slow_start, ограничение скорости отдачи MP4 пропорционально битрейту.

По производительности Angie и Nginx практически идентичны — оба используют одну и ту же event-driven архитектуру, разница в бенчмарках укладывается в погрешность измерения. Разница исключительно в возможностях вокруг ядра.

Стоит знать один нюанс истории проекта: Angie возник как реакция на закрытие российского офиса F5 и вопросы к корпоративному управлению Nginx — сам создатель Nginx, Игорь Сысоев, в разработке Angie не участвует. Тем не менее команда, стоящая за проектом, — это именно те инженеры, что годами писали код, который вы, скорее всего, уже используете в проде.

Traefik — автоматизация для динамической инфраструктуры

Traefik не хранит список бэкендов в файле — он читает его из providers: Docker (по меткам на контейнерах), Consul, файлы, а также оркестраторы вроде Kubernetes, если инфраструктура на них построена. Добавил метки на новый контейнер — маршрут появился сам, без reload.

Сильные стороны:

  • Автоматическое обнаружение сервисов. Ключевая фича — маршрутизация следует за реальным состоянием инфраструктуры.
  • Встроенный ACME-клиент. Let's Encrypt настраивается один раз в статическом конфиге, дальше сертификаты для новых доменов выпускаются автоматически через метки, включая HTTP-01, DNS-01 (нужен для wildcard-сертификатов) и TLS-ALPN-01.
  • Встроенный дашборд. Наглядная карта живых маршрутов и middleware из коробки — у Nginx для этого нужен либо nginx-amplify, либо отдельный стек метрик.
  • HTTP/3, gRPC, TCP/UDP-роутинг — как равноправные сценарии, а не надстройки.

Из практических нюансов: Traefik — это только прокси, не веб-сервер. Раздать статический index.html напрямую он не умеет — всегда нужен бэкенд. Также стоит учитывать миграционное трение между Traefik v2 и v3 (2024): синтаксис middleware изменился, старые гайды и конфиги из интернета часто не работают без правок.

Сравнение по практическим параметрам

Параметр Nginx Angie Traefik
Модель конфигурации Статичный файл, reload при изменениях Статичный файл (совместим с nginx.conf) Динамическая, читает Docker/Consul
Автообнаружение сервисов Нет (нужны Consul-template/confd) Да, для апстримов из Docker Да, полностью из коробки
SSL-сертификаты Внешний Certbot + cron Встроенный ACME-клиент Встроенный ACME-клиент
Дашборд Платный (Nginx Plus) или сторонний Встроен (Console Light) Встроен бесплатно
Метрики Сторонний экспортёр JSON API + Prometheus из коробки Prometheus из коробки
Кэширование Полноценное, гибкое Полноценное + персистентность кэша на диске Отсутствует
Раздача статики Да, полноценный веб-сервер Да, полноценный веб-сервер Нет, только прокси
Производительность Эталонная Идентична Nginx (то же ядро) Достаточна для типичных self-hosted сценариев
Лицензия BSD-2-Clause (mainline) BSD-2-Clause MIT
Идеально для Стабильный набор сервисов, статика, кэш-heavy нагрузки То же, что Nginx, но без боли с сертификатами и мониторингом Docker Compose с частыми деплоями

Практический пример — Traefik с автообнаружением

# docker-compose.yml
services:
  traefik:
    image: traefik:v3.2
    container_name: traefik
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.le.acme.httpchallenge=true"
      - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.le.acme.email=you@example.com"
      - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik-certs:/letsencrypt
    restart: unless-stopped

  my-app:
    image: my-app:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.my-app.rule=Host(`app.example.com`)"
      - "traefik.http.routers.my-app.entrypoints=websecure"
      - "traefik.http.routers.my-app.tls.certresolver=le"
    restart: unless-stopped

volumes:
  traefik-certs:

Добавление ещё одного сервиса — это просто такие же метки в его секции docker-compose.yml, никаких правок Traefik не требуется.

Практический пример — тот же результат на Nginx

# /etc/nginx/sites-available/app.example.com
server {
    listen 80;
    server_name app.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
sudo certbot --nginx -d app.example.com
sudo nginx -t && sudo systemctl reload nginx

Каждый новый сервис — это новый файл в sites-available и отдельный вызов certbot. Более предсказуемо и прозрачно, но требует ручных шагов на каждое изменение.

Тот же результат на Angie — без Certbot

# /etc/angie/sites-available/app.example.com
resolver 1.1.1.1 1.0.0.1 valid=300s;

server {
    listen 80;
    server_name app.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name app.example.com;

    acme_certificate le;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

acme_client le https://acme-v02.api.letsencrypt.org/directory;
sudo ln -s /etc/angie/sites-available/app.example.com /etc/angie/sites-enabled/
sudo angie -t && sudo systemctl reload angie
# сертификат будет запрошен и продлён автоматически — Certbot и cron не нужны

Конфиг почти идентичен Nginx-варианту, но acme_certificate и acme_client заменяют собой Certbot целиком — включая автопродление. Учитывая, что Angie — drop-in замена, миграция с уже работающего Nginx обычно сводится к установке пакета и переносу конфигов без изменений (кроме собственно замены секции сертификатов на acme_certificate, если решите отказаться от Certbot).

Что выбрать

Nginx стоит взять, если: - Нужна максимально консервативная, проверенная временем база — без экспериментов с менее обкатанными форками - Уже есть выстроенная инфраструктура вокруг mainline Nginx (мониторинг, автоматизация, документация команды) - Устраивает связка с Certbot — она хорошо изучена и стабильна

Angie стоит взять, если: - Разворачиваете новый сервер и хотите Nginx-совместимость без боли с сертификатами и мониторингом "из коробки" - Уже есть Nginx-инфраструктура, но надоело поддерживать Certbot и отдельный стек метрик - Нужна часть возможностей Nginx Plus (JSON API, продвинутый мониторинг) без платной лицензии - Важно, кто и как развивает используемый софт — Angie ведут инженеры, годами писавшие ядро самого Nginx

Traefik стоит взять, если: - Инфраструктура — Docker Compose с частыми деплоями новых сервисов - Нужно максимально полное автообнаружение (не только апстримов, но и всей маршрутизации целиком) - Полезен встроенный дашборд для визуального контроля живых маршрутов - Приемлемо, что сам Traefik — не веб-сервер, и статику отдаёт отдельный бэкенд

Итог

Как и в случае с S3-хранилищами, выбор здесь не про "что лучше" абсолютно, а про соответствие модели инфраструктуры — но здесь есть и третий вариант, который стоит держать в уме. Nginx — это точный контроль и производительность для относительно статичного набора сервисов, но с ручным Certbot и отдельным стеком мониторинга. Traefik — это автоматизация ценой некоторой прозрачности, лучший выбор для динамичных контейнерных сред. Angie — это, по сути, Nginx с закрытыми болевыми точками: тот же конфиг, то же ядро, но встроенный ACME и метрики без сторонних инструментов. Для нового проекта на self-hosted VPS сегодня разумная отправная точка — начать сравнение именно с Angie, а не с классического Nginx, и уже от него отталкиваться в сторону Traefik, если инфраструктура станет достаточно динамичной.