Angie и Angie PRO обновлены до версии 1.12.0#
Выпущены Angie и Angie PRO 1.12.0 — крупное функциональное обновление. В Angie с открытым исходным кодом появились балансировка по времени ответа, режим «обучения» sticky и вывод серверов из работы (портированы из Angie PRO), модуль Metrics для stream, сервер DNS-over-HTTPS, API сертификатов, расширенный ACME, а также фильтрация и вывод в формате JSON для журнала ошибок; выпуск основан на последней версии nginx с туннелированием CONNECT.
Доступны Angie и его коммерческая версия Angie PRO — 1.12.0 — с большим набором новых возможностей в каждой из редакций. Если релиз 1.11.0 показался масштабным, этот пошёл ещё дальше: список изменений в каждой из редакций превысил 30 пунктов.
Шесть возможностей Angie PRO теперь доступны в версии с открытым исходным кодом:
Балансировка нагрузки по среднему времени ответа с помощью директивы
least_timeдля проксируемых серверовhttpиstream: дляhttpучитывается время получения заголовка или полного ответа, дляstream— время установления соединения и получения байтов. Коэффициент сглаживания настраивается директивойresponse_time_factor.Режим
learnдирективыsticky— привязка клиентов к серверам по динамически создаваемым ключам. Сессии хранятся в разделяемой памяти, а способ их создания и поиска гибко настраивается через переменные, например по значению cookie из ответа проксируемого сервера.Режим
drain— плавный вывод сервера из ротации: новые запросы на него не направляются, а уже привязанные клиенты дообслуживаются; сервер переходит в новое состояниеdraining. Обновление без простоя, как и задумано.Среднее время ответа в API статистики: разделы
/status/http/upstreams/и/status/stream/upstreams/теперь показывают по каждому серверу сразу несколько метрик — дляhttpвремя получения заголовка и полного ответа, дляstreamвремя установления соединения, первого и последнего байта. Коэффициент сглаживания задаётся черезresponse_time_factor; поддерживается Prometheus.
Среди других новшеств обеих редакций:
Встроенный сервер DNS-over-HTTPS: новый модуль DoH (RFC 8484) принимает DNS-запросы по HTTP/HTTPS и проксирует их к DNS-серверам по UDP или TCP. Собственный DoH-сервер настраивается несколькими строками конфигурации.
Расширенный ACME: выпуск сертификатов для IP-адресов (через Let's Encrypt, с поддержкой профилей), External Account Binding (EAB) для коммерческих удостоверяющих центров (DigiCert, SSL.com и других) через аутентификацию HMAC, улучшенная совместимость с SSL.com и подобными серверами, а также директива
acme_dns_ttlдля провайдеров, которые фильтруют DNS-ответы с низким TTL.DNS без настройки: конфигурация резолвера теперь включена по умолчанию — Angie сам читает
/etc/resolv.confи следит за его изменениями, поэтому адреса DNS-серверов больше не нужно прописывать вручную; отключается директивойresolver off.Журналирование нового уровня: фильтрация сообщений через
filter=и тегиerror_log_user_tagдля маршрутизации событий по обработчикам, вывод журнала ошибок в формате JSON, ограничение частоты черезrate=(по умолчанию 1000 сообщений в секунду) и директиваtime_formatс поддержкойstrftime()и%Lдля миллисекунд. Кроме того, ключи SSL-сессий можно журналировать черезssl_keylog_fileиproxy_ssl_keylog_file.Более чистая конфигурация: директива
gotoв модулеrewriteвыполняет внутренний переход на именованный location без изменения URI и работает внутри блокаif, избавляя от обходных приёмов сtry_filesиerror_page. Встроенные страницы ошибок и списки AutoIndex получили тёмную цветовую схему.Статистика и наблюдаемость: модуль Metrics теперь доступен и для модуля
stream— счётчики, гистограммы и скользящие средние через раздел API/status/stream/metric_zones/с поддержкой Prometheus; новый раздел API/certificates/собирает в одном месте все сертификаты из конфигурации и полученные клиентами ACME, упрощая контроль сроков действия; переменная$upstream_transportпоказывает транспорт (TCP или UDP) для каждой попытки соединения с сервером группы.Синхронизация с nginx 1.31.2: включена вся его функциональность, в том числе новый модуль Tunnel для туннелирования CONNECT (Angie как HTTP-прокси для произвольного TCP-трафика), проксирование к серверам по HTTP/2 и новая переменная
$ssl_sigalgsсо списком алгоритмов подписи, поддерживаемых клиентом.
Дополнительно в Angie PRO:
proxy_passс портом для stream-групп: порт можно указать прямо вproxy_passдля группы серверов, у которых он не задан. Одну группу можно использовать для проксирования на разные порты — статус каждого сервера отслеживается единообразно, и недоступность сервера учитывается сразу для всех портов. Директиваno_portявно помечает группу как не использующую порты.proxy_bindтеперь вычисляет переменные после выбора сервера, поэтому исходящее соединение можно привязать к адресу, зависящему от конкретного выбранного сервера.Переменная
$upstream_current_addrсодержит адрес текущего upstream-сервера и доступна уже в момент его выбора — удобна в связке сproxy_bind. В отличие от$upstream_addr, всегда содержит ровно один адрес.Атомарное переключение сервера между основной и резервной группами — одним запросом к полю
backupв разделе/configAPI.Поле
feedbackв API статистики: при использовании одноимённого метода балансировки показывает текущее накопленное значение динамического веса каждого сервера.
Подробнее об изменениях:
P.S. Кстати, через неделю, 21 июля, Angie исполняется четыре года — так что этот релиз стал ещё и небольшим подарком к празднику. Спасибо всем, кто с нами!
Хорошего дня!