Это первая из статей, посвященных веб‑серверу Angie. Мысль создать цикл статей возникла в процессе разработки курса по администрированию Nginx и Angie. Приходилось сталкиваться с темами, которые довольно слабо описаны в открытых источниках, либо не описаны вообще. В планах описать типичные области его использования с реальными примерами доступным языком. Так как большинство решений и конфигов будет совместимо с Nginx, надеюсь, цикл будет полезен сообществу.
Навигация по циклу
Почему стоит переходить на Angie.
Настройка location в Angie. Разделение динамических и статических запросов.
Перенаправления в Angie: return, rewrite и примеры их применения.
Сжатие текста в Angie: статика, динамика, производительность.
Видеоверсия
Если вы предпочитаете видеоформат, то материал доступен на 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!
Следующая статья цикла: Установка Angie из пакетов и в докере.
