И вот тут на сцену выходит angie - форк nginx, который закрывает почти все эти дыры прямо в ядре, бесплатно. Это не очередная обёртка и не панель управления поверх nginx. Это сам веб-сервер, переписанный и расширенный людьми, которые когда-то писали оригинальный nginx. В этом уроке разберём, что такое angie, чем он отличается от nginx, и пощупаем руками две киллер-фичи: нативные метрики через /status и динамическое управление upstream без перезагрузки.
Что такое angie и откуда он взялся
Коротко по родословной. nginx написал Игорь Сысоев, потом проект купила Nginx Inc., потом её купила F5. Часть оригинальной команды разработчиков основала компанию "Веб-Сервер" (РФ) и в 2022 году выпустила angie - форк, который развивается отдельно. Это важно понимать: angie делают не сторонние энтузиасты, а люди, годами писавшие сам nginx. Отсюда и качество, и совместимость.
Главная мысль про angie - это drop-in замена. Архитектура та же: мастер-процесс, воркеры, event-loop на epoll, те же фазы обработки запроса, те же модули. Конфиги nginx работают в angie как есть. Миграция в типичном случае - это поставить пакет: останавливаешь nginx, ставишь angie из их репозитория, он подхватывает твой /etc/nginx (или /etc/angie), и всё едет. Те же директивы server, location, upstream, proxy_pass, те же переменные $remote_addr, $upstream_response_time, $request_id. Ты не переучиваешься - ты получаешь надстройку.
Версии на 2026 год, чтобы не путаться. Стабильная ветка - примерно angie 1.11.6 (вышла 25 мая 2026, собрана на базе кода nginx 1.29.3). Параллельно идёт ветка 1.12 на базе более свежего nginx 1.31.1. Релизы выходят поквартально, команда стабильно подтягивает наработки из основного nginx плюс свои фичи. То есть angie не отстаёт от nginx по части security-патчей и базовых возможностей - он идёт вровень и добавляет сверху.
Сравни структуру решения "что нужно для прода":
Код: Выделить всё
nginx OSS: nginx + prometheus-exporter + certbot + cron + (нет dynamic upstream) + (нет active HC)
nginx Plus: всё в одном, но платно и дорого
angie OSS: angie + /status JSON + Prometheus + native ACME + dynamic upstream API - бесплатно

Angie против nginx: что даёт сверху бесплатно
Теперь по существу - чем angie богаче ванильного nginx в open-source редакции. Это и есть ответ на вопрос "angie против nginx, зачем менять".
1. Нативные метрики: /status JSON + Prometheus + Console Light. В nginx у тебя есть только stub_status - семь чисел про соединения, и всё. В angie встроен полноценный REST API /status, который отдаёт детальный JSON: разбивка по http-зонам, по каждому upstream и каждому серверу в нём (состояние, число запросов, ошибки, тайминги), по кэшам, по resolver-ам, по shared-memory зонам. Тот же endpoint умеет отдавать данные в формате Prometheus - то есть Grafana подключается без отдельного exporter-а. А ещё есть Console Light - лёгкая визуальная панель прямо в браузере, где всё это видно глазами в реальном времени. Это про "angie prometheus" и "angie api" - две самые гуглимые фичи.
2. Динамическое управление upstream без reload. В nginx, чтобы поменять список бэкендов, ты правишь upstream-блок и делаешь nginx -s reload. Reload поднимает новые воркеры, и хоть он и graceful, под нагрузкой это не бесплатно. В angie API умеет PUT/PATCH/DELETE по разделу /config - можно добавить сервер в upstream, пометить его как down, поменять вес, и всё это атомарно, без перезагрузки и без потери соединений. Это огромная вещь для деплоев и автоскейлинга.
3. Нативный ACME. Angie умеет сам получать и продлевать сертификаты Let's Encrypt прямо из конфига - директивы acme и acme_client, поддержка ECDSA. Никакого certbot, cron и хуков. В ванильном nginx такого в ядре нет (там либо certbot, либо ACME через njs-модуль).
4. Нативный Zstd. Сжатие zstd (zstd on; zstd_static on;) встроено в angie. В nginx zstd только через сторонний модуль, который надо собирать. Zstd при близком к gzip уровне сжатия заметно быстрее по CPU.
5. Service discovery по меткам Docker. С версии 1.10 angie умеет автоматически наполнять upstream серверами по меткам Docker/Podman-контейнеров. Запустил контейнер с нужным label - он сам появился в балансировке. Без внешних Consul-template и подобного.
6. Здоровье апстримов и slow_start. В open-source nginx есть только пассивные проверки - max_fails и fail_timeout: сервер помечается дохлым, только когда в него реально прилетел запрос и упал. Active health checks (когда сам сервер периодически стучится в бэкенд и проверяет его ДО трафика) и slow_start (плавный прогрев восстановившегося сервера, чтобы не уронить его лавиной) в мире nginx - привилегия платного Plus. Angie приносит эти механизмы в свою экосистему (модуль upstream_probe для активных проверок, опция slow_start у server) - и в open-source ты как минимум получаешь честное состояние recovering у пиров, а полноценные активные пробы доступны в редакции PRO. Плюс HTTP/3 к апстриму, мониторинг stream/MQTT-сессий, привязка воркеров к NUMA-узлам.
Практика: метрики /status и динамический upstream из коробки
Хватит теории, потрогаем. Поднимаем минимальный конфиг angie с API. Файл /etc/angie/http.d/api.conf (структура каталогов как у nginx):
Код: Выделить всё
upstream backend {
zone backend 1m; # shared-memory зона ОБЯЗАТЕЛЬНА для статистики и для API
server 10.0.0.11:9000;
server 10.0.0.12:9000;
keepalive 32;
}
server {
listen 80;
server_name _;
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# Внутренний server для метрик и управления - закрываем по IP
location =/status {
api /status/; # REST API: детальный JSON
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
location =/p8s {
prometheus all; # тот же сервер отдаёт Prometheus-формат
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
}
Проверяем конфиг и перезагружаем: angie -t и angie -s reload (бинарь называется angie, но всё как у nginx). Теперь дёргаем статус:
Код: Выделить всё
$ curl -s http://127.0.0.1/status/http/upstreams/backend/peers/ | jq .
{
"10.0.0.11:9000": {
"server": "10.0.0.11:9000",
"state": "up",
"selected": { "current": 2, "total": 1841 },
"responses": { "200": 1798, "500": 4 },
"data": { "sent": 9123847, "received": 41238472 },
"health": { "fails": 0, "unavailable": 0 }
},
"10.0.0.12:9000": {
"server": "10.0.0.12:9000",
"state": "up",
"selected": { "current": 1, "total": 1836 },
...
}
}
Теперь самое вкусное - динамическое управление без reload. Допустим, сервер 10.0.0.12 надо вывести на обслуживание. В nginx ты бы правил конфиг и делал reload. В angie - один HTTP-запрос:
Код: Выделить всё
$ curl -X PATCH http://127.0.0.1/status/config/http/upstreams/backend/servers/10.0.0.12:9000/ \
-d '{"down": true}'
# сервер мгновенно помечен down, новый трафик на него не идёт.
# вернуть в строй:
$ curl -X PATCH http://127.0.0.1/status/config/http/upstreams/backend/servers/10.0.0.12:9000/ \
-d '{"down": false}'
# добавить новый сервер в группу на лету:
$ curl -X PUT http://127.0.0.1/status/config/http/upstreams/backend/servers/10.0.0.13:9000/ \
-d '{"weight": 5, "max_fails": 3}'
Open-source против PRO и типичные грабли
У angie две редакции. Open-source (то, что мы трогали) - это уже /status JSON, Prometheus, Console Light, dynamic upstream API, ACME, Zstd, Docker-discovery. Этого хватает большинству. Angie PRO - платная, добавляет полноценные активные health-пробы (upstream_probe со сложными сценариями), расширенные алгоритмы балансировки, управление сертификатами и апстримами прямо из Console Light кнопками, и прочее enterprise. Логика простая: базовую наблюдаемость и динамику ты получаешь даром, а за самые тяжёлые SLA-фичи - платишь, и всё равно дешевле и честнее, чем nginx Plus.
Теперь грабли, на которых спотыкаются при переезде на angie:
- Забыл zone в upstream. Нет zone - нет статистики по серверам и нет управления через API. Самая частая ошибка. API молча не покажет пиров.
- Открыл /status наружу. Этот endpoint раскрывает всю внутрянку и позволяет менять конфиг. Закрывай по IP (allow/deny) или вешай на отдельный внутренний listen, как в эталонном global_metrics.conf проекта-образца - там stub_status слушает на :8080 и пускает только локалку и приватные сети. Для /status принцип тот же, только ставки выше: тут не просто чтение, а запись.
- Путаешь пути конфигов. После apt install angie конфиги лежат в /etc/angie, а не /etc/nginx. Если переезжаешь - перенеси include-цепочку. Сама структура (nginx.conf -> include http.conf -> globals/* + sites) переносится один в один.
- Ждёшь от open-source активных проб. Помни границу: пассивные проверки (max_fails) есть и в OSS angie, как в nginx. Полноценные активные пробы по расписанию - это PRO. Не обещай заказчику то, чего нет в бесплатной редакции.
- Считаешь angie "ещё одним nginx-дистрибутивом". Это самостоятельный форк со своим циклом релизов и своими CVE-нотификациями. Подписывайся на их security-рассылку отдельно, обновляйся отдельно.
Мини-лаба: angie с метриками и живым upstream за 10 минут
Повтори руками, лучше в Docker, чтобы ничего не сносить на хосте.
- Шаг 1. Подними angie в контейнере: docker run -d --name angie -p 8080:80 docker.angie.software/angie:latest (официальный образ). Проверь, что отвечает: curl -s http://127.0.0.1:8080/.
- Шаг 2. Зайди внутрь: docker exec -it angie sh. Положи конфиг из секции "Практика" в /etc/angie/http.d/, заменив реальные бэкенды на два простых (можно поднять рядом два контейнера с любым echo-сервером на 9000).
- Шаг 3. Не забудь zone backend 1m; в upstream. Сделай angie -t, затем angie -s reload.
- Шаг 4. Пусти немного трафика: for i in $(seq 100); do curl -s http://127.0.0.1/api/ >/dev/null; done. Теперь дёрни curl -s http://127.0.0.1/status/http/upstreams/backend/peers/ | jq . и убедись, что счётчики selected.total растут на обоих серверах.
- Шаг 5. Выведи один сервер через PATCH ({"down": true}), снова пусти трафик и проверь по /status, что на него запросы больше не идут. Верни обратно. Ни одного reload ты не делал.
- Шаг 6. Открой /p8s и убедись, что отдаётся Prometheus-формат - это готовый scrape-target для Grafana.
Контрольные вопросы
- 1. Почему директива zone в блоке upstream обязательна для работы статистики и API в angie, и что физически она создаёт?
- 2. Чем динамическое изменение upstream через PATCH к /config принципиально лучше, чем правка конфига и nginx -s reload под нагрузкой?
- 3. Какие из перечисленного есть в open-source angie бесплатно, а что только в PRO: /status JSON, Prometheus, Console Light, dynamic upstream API, полноценные активные health-пробы?
- 4. Чем активные health checks отличаются от пассивных (max_fails), и почему пассивных иногда недостаточно для чистого балансирования?
Angie - это форк nginx от части его оригинальных авторов, drop-in замена с полной совместимостью конфигов: миграция сводится к установке пакета. Сверх ванильного nginx он бесплатно даёт то, за что в мире nginx платят за Plus или городят зоопарк инструментов: детальный /status в JSON, метрики Prometheus и панель Console Light, динамическое управление upstream без reload, нативный ACME и Zstd, Docker service discovery. Версии 2026 - 1.11.6 (база nginx 1.29.3) и ветка 1.12 (база 1.31.1), релизы поквартально, security-патчи вровень с nginx. Когда выбирать angie: когда нужна наблюдаемость и динамика апстримов из коробки, но не хочется платить за nginx Plus. Платная редакция PRO добивает enterprise-фичи вроде полноценных активных проб. Главное - переход низкорисковый: то, что ты уже знаешь про nginx, работает в angie без изменений.