Это первая из статей, посвященных веб‑серверу Angie. Мысль создать цикл статей возникла в процессе разработки курса по администрированию Nginx и Angie. Приходилось сталкиваться с темами, которые довольно слабо описаны в открытых источниках, либо не описаны вообще. В планах описать типичные области его использования с реальными примерами доступным языком. Так как большинство решений и конфигов будет совместимо с Nginx, надеюсь, цикл будет полезен сообществу.

Навигация по циклу

  1. Почему стоит переходить на Angie.

  2. Установка Angie из пакетов и в докере.

  3. Переезд с Nginx на Angie. Пошаговая инструкция.

  4. Настройка location в Angie. Разделение динамических и статических запросов.

  5. Перенаправления в Angie: return, rewrite и примеры их применения.

  6. Сжатие текста в Angie: статика, динамика, производительность.

  7. Серверное кэширование в Angie: тонкости настройки.

  8. Настройка TLS в Angie: безопасность и скорость.

  9. Настройка Angie в роли обратного HTTP-прокси.

  10. Балансировка нагрузки для HTTP(S) в Angie.

  11. Мониторинг Angie с помощью Console Light и API.

  12. Балансировка и проксирование L4-трафика в Angie.

  13. Клиентское кэширование в Angie.

  14. Динамические группы проксируемых серверов в Angie.

  15. Мониторинг Angie с Prometheus и Grafana.

  16. Отказоустойчивый кластер Angie с VRRP и Keepalived.

  17. Контроль доступа в Angie.

  18. Аутентификация клиентов в Angie с помощью TLS-сертификатов.

Видеоверсия

Если вы предпочитаете видеоформат, то материал доступен на 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 из пакетов и в докере.