Это первая из статей, посвященных веб‑серверу Angie. Мысль создать цикл статей возникла в процессе разработки курса по администрированию Nginx и Angie. Приходилось сталкиваться с темами, которые довольно слабо описаны в открытых источниках, либо не описаны вообще. В планах описать типичные области его использования с реальными примерами доступным языком. Так как большинство решений и конфигов будет совместимо с Nginx, надеюсь цикл будет полезен сообществу.
Видеоверсия
Если вы предпочитаете видеоформат, то материал доступен на YouTube, RuTube и VKVideo.
Краткая история Nginx
Наверняка все читатели слышали или использовали в своих проектах веб‑сервер Nginx. Он давно стал стандартом де‑факто для фронт‑серверов веб‑проектов. На первых этапах развития Nginx был локальным продуктом, который использовался преимущественно в России, но эффективная архитектура и высокое качество кода вывели его на глобальный уровень.
Ранняя стадия развития Nginx проходила исключительно в формате open‑source проекта. Игорь Сысоев, будучи системным администратором в топ-1 компании Рунета, Rambler, решал задачу обслуживания растущей нагрузки с ограниченными ресурсами. В частности, решалась проблема C10K — поддержки большого количества HTTP‑подключений на одном сервере. Были попытки улучшить работу стандартного веб‑сервера того времени (Apache), но в итоге было решено разрабатывать Nginx с нуля. Популярность веб‑сервера росла, появлялось всё больше стандартных и сторонних модулей. Это привело к появлению компании Nginx и первого коммерческого продукта — Nginx Plus (2013 год). Решения на базе Nginx стали конкурировать с некоторыми продуктами компании F5, которая решила приобрести компанию Nginx целиком в 2019 году. Позднюю историю Nginx можно почитать в статье блога. Что характерно, в этой статье мастерски замалчивается тот факт, что Nginx появился и развивался в России, а также не указаны имена основных разработчиков, кроме Игоря Сысоева.
Причины появления Angie
С 2019 года разработка Nginx и связанных с ним продуктов велась уже в рамках компании F5. Продолжал работу московский офис разработки, где были сосредоточены ключевые разработчики Nginx. В общем, жизнь шла своим чередом до 2022 года. В рамках общих санкций против России компания F5 приняла решение уйти с российского рынка, а также закрыть московский офис разработки. Разработчикам был дан выбор: уехать из страны и продолжать разработку в F5 или уволиться.
В этот момент и появилась идея создать форк Nginx и развивать его самостоятельно, избавившись от давления большой корпорации. Решение было рискованным, так как перезапускать компанию пришлось бы с нуля: без клиентов, источников дохода и коммерческого продукта. С другой стороны, за плечами создателей были десятки человеко‑лет опыта разработки и поддержки Nginx и Nginx Plus.
В результате, была создана компания ООО «Веб‑сервер», которая приступила к разработке форка Nginx — Angie. Чуть позже появился ещё один форк Nginx — Freenginx, который создал Максим Дунин, один из ключевых разработчиков Nginx. Кроме того, с 2011 года развивается китайский форк Nginx (Tengine). Так что сегодня можно уже говорить об «экосистеме Nginx», где сосуществуют несколько продуктов с общими корнями.
Так, в октябре 2022 года появился Angie OSS (open source), а чуть позже — коммерческая версия Angie PRO. С первого релиза Angie принёс большое количество новых возможностей, за развитие которых в компании активно взялись.
Фичи Angie OSS
Очевидно, что форк ради форка никому не нужен. Для привлечения интереса к продукту необходимо не только заявить, но и реализовать уникальные фичи. При создании Angie часть возможностей повторяли фичи Nginx Plus, но в открытом продукте. Другая часть отличий Angie от Nginx — это развитие возможностей для соответствия современным требованиям к сервисам. Разделим все отличия на несколько классов: балансировка, мониторинг и прочее. Далее последует перечисление этих фич; чтобы не раздувать объём статьи, отдельные фичи будут рассмотрены в будущих материалах.
Балансировка и проксирование
Режим с привязкой сессий (sticky).
Поддержка HTTP/3 для подключений к проксируемым серверам.
Возможность предварительного чтения протокола MQTT для более гибкого проксирования и балансировки.
Гибкая балансировка протокола RDP с учетом сессионных cookie.
Плавный ввод сервера в работу с помощью параметра slow_start в директиве server.
Параметр drain, позволяющий плавно вывести сервер из эксплуатации. В этом режиме на сервер отправляются запросы только из связанных с ним сессий.
Ограничение скорости отдачи MP4-файлов пропорционально битрейту файлов.
Мониторинг
Встроенный экcпортер метрик в формате Prometheus с поддержкой шаблонов.
Модуль API для просмотра метрик сервера и его конфигурации в формате JSON.
Консоль c веб‑интерфейсом для мониторинга веб‑сервера и проксируемых серверов Console Light.
Прочее
Автоматическое получение и продление TLS‑сертификатов с модулем ACME. Поддерживаются обычные и wildcard‑сертификаты. Для последних требуется дополнительный скрипт для работы с DNS‑API или частичное делегирование зоны на сервер с Angie.
Возможность настройки комбинированных location. Полезно в случае нескольких блоков с одинаковой конфигурацией.
Отображение “поколения” конфигурации и версии сервера в списке процессов. Можно отслеживать успешность перезагрузки конфигурации и точную версию рабочих процессов.
Возможность получения полной конфигурации сервера через API.
Фичи в Angie PRO (коммерческая версия)
В случае, если вы рассматриваете переход с Nginx Plus на Angie, либо ищете корпоративное решение, то стоит рассмотреть Angie PRO. В этой версии реализовано большинство фич коммерческого Nginx Plus, но, конечно, реализация и названия директив отличаются (видимо во избежание конфликтов с компанией F5). Основные отличия Angie PRO от Angie OSS находятся в области балансировки и проксирования.
В балансировке PRO версия добавляет активные проверки состояния серверов, очередь запросов, дополнительные режимы привязки сессий (sticky learn), а также балансировку по обратной связи от серверов и по времени отклика. API в PRO также расширен, в нем есть возможность управления конфигурацией. Также в PRO версии есть шардирование кэша и возможность изменять заголовок Server.
Возможно, позднее я отдельно остановлюсь на версии Angie PRO, но пока в рамках данного цикла я буду в первую очередь рассматривать возможности открытой и общедоступной версии Angiе.
Поставка модулей в пакетах
В официальных репозиториях Angie можно найти готовые пакеты сторонних модулей. Модули доступны как для Angie OSS, так и Angie PRO. Собраны наиболее популярные модули, включая: brotli, vod, rtmp, modsecurity, zstd, cache‑purge и другие. Это избавляет от необходимости собирать модули из исходного кода или искать сторонние репозитории с пакетами.
Кроме того, пакеты Angie собираются под целый ряд «российских» дистрибутивов Linux, так что импортозамещение будет происходить без боли.
Что удобно, в обычных пакетах также присутствует debug‑версия angie для сбора отладки. Достаточно поменять симлинк на нужный бинарник и можно собирать debug‑логи.
Конечно, Docker‑образы контейнеров также собраны и доступны в нескольких вариантах.
Поддержка
Используя свободное ПО, мы привыкли к самостоятельному решению проблем и не особо полагаемся на поддержку производителя. Обычно поддержка заключается в тематических статьях, списках рассылки, ответах на Stack Overflow, форумах и подобных местах. В случае с Angie существует (по крайней мере на момент написания статьи) уникальная возможность общения с разработчиками софта напрямую. Для этого есть ТГ‑чат для поддержки Angie.
Возможно, эта мера временная, на время раскрутки проекта, но от этого её ценность не снижается. Также есть форум, если формат ТГ‑чата вам не подходит.
К слову, поддержкой Angie занимаются те же люди, которые организовали поддержку Nginx Plus. Возможность общения с авторами сильно выручает при решении проблем и использовании новых фич. Конечно, есть и коммерческая поддержка с гарантией SLA и заказной разработкой.
Хорошо, возможно, вы решили перевести какой‑нибудь из проектов с Nginx на Angie. Что нужно сделать для миграции?
Миграция с Nginx на Angie
Процесс перехода на Angie можно сделать максимально безболезненным. Дело в том, что все директивы Nginx прекрасно работают в Angie (общая кодовая база), так что изменения в конфигурации будут касаться путей к конфигам и логам.
Установка пакетов Angie не конфликтует с Nginx. То есть, можно установить Angie, отключить автостарт сервиса и спокойно готовить конфиги для Angie. Стандартный каталог конфигов Nginx: /etc/nginx, для Angie: /etc/angie. Когда новая конфигурация будет готова, можно будет одной командой остановить Nginx и запустить Angie.
Также нужно позаботиться о подключении сторонних модулей, если они использовались, и проверить подключение стандартных динамических модулей. Подробнее процесс миграции будет описан в отдельной статье.
Итоги
Стоит ли использовать Angie, каждый решает самостоятельно. Сейчас проект относительно молодой (3 года), но в то же время пережил период становления и активно развивается. На мой взгляд, уже сейчас Angie является удобным заменителем Nginx с расширенной функциональностью и может применяться по умолчанию в любых проектах.
Подведём итог по аргументам в пользу Angie на сегодня:
дополнительные возможности балансировки;
расширенные фичи мониторинга;
удобная поставка сторонних модулей в официальном репозитории;
возможность получения профессиональной поддержки и кастомной разработки от российского разработчика;
активная и доступная поддержка открытой версии;
аккумулирование нововведений из всех вариантов экосистемы Nginx;
более высокий темп разработки и экспертиза оригинальной команды Nginx.
Ну и не стоит забывать, что в мире открытого ПО каждый может внести свой вклад: найти опечатку в документации, помочь ответом на вопрос на форуме или зарепортить баг (или даже предложить патч). Будем ждать новых фич и других полезностей от команды Angie!