Изменения в Angie 1.11.8 18.06.2026 *) Безопасность: при проксировании специально созданного запроса на gRPC-бэкенд с использованием директив "ignore_invalid_headers off;" и "large_client_header_buffers" с большим значением могло происходить переполнение буфера, что позволяло атакующему повредить память рабочего процесса или вызвать его падение (CVE-2026-42055); исправление портировано из nginx 1.31.2. *) Безопасность: при обработке специально переданного ответа с декодированием из UTF-8 через директиву "charset_map" могло происходить чтение данных за границами буфера, что позволяло атакующему отправить клиенту ограниченное содержимое памяти рабочего процесса или вызвать его падение (CVE-2026-48142); исправление портировано из nginx 1.31.2. *) Исправление: IP-адрес без номера порта в директивах "acme_http_port" или "acme_dns_port" приводил к падению мастер-процесса при чтении конфигурации. Изменения в Angie 1.11.7 15.06.2026 *) Добавление: совместимость с OpenSSL 4.0. *) Исправление: в некоторых конфигурациях ответ на ACME DNS-проверку мог отправляться не с того IP-адреса/интерфейса, на который был отправлен запрос, что могло приводить к ошибке выпуска сертификата. *) Исправление: при использовании Docker-модуля быстрое завершение контейнеров сразу после старта могло вызывать падение рабочего процесса. *) Исправление: изменение параметров в директивах "metric_zone" или "metric_complex_zone" для уже существующей зоны могло привести к падению рабочего процесса при перезагрузке конфигурации. *) Исправление: при использовании параметра "window=" метрики типа "average mean" результат на некоторых периодах мог вычисляться неправильно; в частности, вскоре после запуска системы на Linux значения могли оставаться нулевыми. *) Исправление: значения метрик типов "count" и "histogram" неправильно выводились на 32-битных платформах после достижения 2^32-1. *) Исправление: сборка завершалась ошибкой при использовании опции ./configure "--with-stream=dynamic" в сочетании с "--with-stream_acme_module"; проблема появилась в 1.10.3. Изменения в Angie 1.11.6 25.05.2026 *) Безопасность: при использовании директивы "rewrite" с регулярным выражением, содержащим вложенные захваты PCRE, и строкой замены, ссылающейся на несколько таких захватов, атакующий при некоторых независящих от него обстоятельствах мог вызвать падение рабочего процесса, а на системах без рандомизации адресного пространства — выполнение произвольного кода (CVE-2026-9256); исправление портировано из nginx 1.31.1. Изменения в Angie 1.11.5 15.05.2026 *) Безопасность: при использовании директивы "rewrite" с неименованным захватом (например, $1, $2) и строкой замены, содержащей символ "?", за которой следует директива "rewrite", "if" или "set", атакующий при некоторых независящих от него обстоятельствах мог вызвать падение рабочего процесса, а на системах без рандомизации адресного пространства — выполнение произвольного кода (CVE-2026-42945); исправление портировано из nginx 1.31.0. *) Безопасность: при использовании директивы "ssl_ocsp" во время обработки ответов DNS-сервера могло произойти обращение к ранее освобождённой памяти, что позволяло атакующему повредить память рабочего процесса или вызвать его падение (CVE-2026-40701); исправление портировано из nginx 1.31.0. *) Безопасность: при использовании HTTP/3 атакующий мог выполнить подмену IP-адреса и тем самым обойти ограничения или авторизацию в некоторых конфигурациях (CVE-2026-40460); исправление портировано из nginx 1.31.0. *) Безопасность: при использовании директив "scgi_pass" или "uwsgi_pass" атакующий, находясь в позиции посредника (MITM) и контролируя ответы проксируемого сервера, мог вызвать избыточное выделение памяти или чтение за пределами буфера, что позволяло отправить клиенту содержимое памяти рабочего процесса или вызвать его падение (CVE-2026-42946); исправление портировано из nginx 1.31.0. *) Безопасность: при обработке специально созданного ответа с декодированием из UTF-8 через директиву "charset_map" могло происходить чтение данных за границами буфера рабочего процесса, что позволяло атакующему при некоторых независящих от него обстоятельствах отправить клиенту ограниченное содержимое памяти рабочего процесса или вызвать его падение (CVE-2026-42934); исправление портировано из nginx 1.31.0. Изменения в Angie 1.11.4 25.03.2026 *) Безопасность: TLS-согласование с клиентом в stream-модуле могло завершиться успешно при том, что OCSP отклонил клиентский сертификат (CVE-2026-28755); исправление портировано из nginx 1.29.7. *) Безопасность: в DAV-модуле при обработке COPY- или MOVE-запроса в "location" с директивой "alias" могло произойти переполнение буфера, что позволяло атакующему модифицировать исходный или целевой путь за пределы корневой директории (CVE-2026-27654); исправление портировано из nginx 1.29.7. *) Безопасность: обработка специально созданного файла MP4-модулем могла приводить к падению рабочего процесса, а также потенциально могла иметь другие последствия (CVE-2026-32647); исправление портировано из nginx 1.29.7. *) Безопасность: обработка специально созданного файла в MP4-модуле на 32-битных платформах могла приводить к падению рабочего процесса, а также потенциально могла иметь другие последствия (CVE-2026-27784); исправление портировано из nginx 1.29.7. *) Безопасность: когда использовался почтовый прокси-сервер, атакующий с помощью PTR DNS-записи мог вставить данные в HTTP-запросы аутентификации, а также в команду XCLIENT в SMTP-соединении к проксируемому серверу (CVE-2026-28753); исправление портировано из nginx 1.29.7. *) Безопасность: если в почтовом прокси-сервере использовался метод аутентификации CRAM-MD5 или APOP и были разрешены повторные попытки аутентификации, то могло произойти падение рабочего процесса (CVE-2026-27651); исправление портировано из nginx 1.29.7. *) Исправление: редкие системные ошибки перед подключением к проксируемому серверу могли повлиять на корректность статуса проксируемых серверов в модулях HTTP и stream; в stream-модуле они также могли привести к падению рабочего процесса; проблема появилась в 1.9.1. *) Исправление: в конфигурациях, где директивы "proxy_http_version 3" и "proxy_set_header Host .." наследовались из блока "http", исходящие HTTP/3-запросы могли отправляться без заголовка "Host". Изменения в Angie 1.11.3 06.02.2026 *) Безопасность: атакующий, находясь в позиции посредника (MITM) перед проксируемым сервером с использованием HTTPS, при некоторых независящих от него обстоятельствах мог внедрить в ответ данные в виде открытого текста до начала TLS-согласования (CVE-2026-1642); исправление портировано из nginx 1.29.5. Изменения в Angie 1.11.2 15.01.2026 *) Исправление: если BPF был отключен, то HTTP/3-запросы могли завершаться с ошибкой "[alert] sendmsg() failed (90: Message too large) while sending frames"; проблема появилась в 1.11.0. *) Исправление: HTTP/3-запросы не принимались при прослушивании wildcard IPv6-адреса и включённом BPF; проблема появилась в 1.11.0. *) Исправление: при указании доменного имени в директиве "docker_endpoint" подключения к Docker API и обновления групп проксируемых серверов не происходили. Изменения в Angie 1.11.1 30.12.2025 *) Изменение: теперь, если в директиве "acme_http_port" указан только порт без IP (значение по умолчанию) и есть слушающие на этом порту блоки "server", то обработка HTTP-подверждений для заданного порта в ACME работает только на указанных IP-адресах в директивах "listen" данных блоков; попытки слушать на всех остальных IP, как было раньше, не производится; это делает настройку более гибкой и предотвращает возможную проблему при обновлении с предыдущих версий на конфигурациях, где были только блоки "server", слушающие на 80 порту и конкретных IP-адресах. *) Исправление: HTTP/2-запросы не учитывались в серверных зонах статистики; проблема появилась в 1.11.0. *) Исправление: если ACME-клиент был отключен в конфигурации и не имел ранее полученного сертификата, запрос к API статистики для данного клиента мог привести к падению рабочего процесса. *) Исправление: если в качестве ключа директивы "status_zone", заданной на уровне блоков "server", использовались переменные "$http_host" или "$cookie_*", то HTTP/3-запросы могли не учитываться в указанной зоне статистики. Изменения в Angie 1.11.0 24.12.2025 *) Изменение: переменная "$http_host" в запросах по протоколу HTTP/3 теперь инициализируется из значения псевдозаголовка ":authority", если заголовок "Host" не был передан, что является нормальным для клиентов; до этого отличия в поведении от протоколов младших версий могли создавать проблемы в конфигурациях с использованием переменной "$http_host". *) Изменение: если все HTTP-сервера в upstream-группе оказываются недоступны или возвращают ошибку, то теперь всегда возвращается собственная страница ошибки вместо принятой от последнего сервера, когда тот вернул ошибочный статус согласно настройкам директивы "proxy_next_upstream" (и ей подобных); это позволяет получить консистентное поведение во всех случаях. *) Изменение: параметр "REQUEST_METHOD" в файлах конфигурации "fastcgi.conf", "fastcgi_params", "uwsgi_params" и "scgi_params" теперь устанавливается через переменную "$upstream_request_method", которая принимает значение GET для HEAD-запросов при настройке кэширования; это предотвращает проблему, когда ранее в результате HEAD-запроса могло происходить сохранение пустых ответов, которые затем отдавались на GET-запросы, так как в типичной конфигурации метод запроса не является ключом кэширования. *) Изменение: максимальный размер ответа от ACME-сервера теперь ограничивается новой директивой "acme_max_response_size", а не параметром "max_cert_size=" директивы "acme_client"; заданного по умолчанию значения достаточно для большинства случаев, но в случае, если обновление завершается ошибкой "[error] too big subrequest response while sending to client", его следует увеличить. *) Изменение: значение по умолчанию директивы "variables_hash_max_size" в HTTP-модуле увеличено до 2048, чтобы снизить вероятность появления предупреждений о неоптимальном построении хэша из-за добавления множества новых переменных за последние годы: "[warn] could not build optimal variables_hash, you should increase either variables_hash_max_size: 1024 or variables_hash_bucket_size: 64; ignoring variables_hash_bucket_size". *) Добавление: произвольно конфигурируемый сбор статистики с помощью нового модуля Metrics в HTTP; позволяет, используя различные методы (счетчики, гистограммы, скользящие средние и др.), агрегировать любые данные на разных стадиях обработки запроса в реальном времени с помощью переменных по заданным ключам и отдавать их в секции "/status/http/metric_zones/" API статистики (с поддержкой Prometheus), тем самым добавляя встроенный мощный аналитический инструмент для всего HTTP-трафика. *) Добавление: поддержка ALPN-верификации для ACME, задаваемая при помощи значения "alpn" в качестве параметра "challenge" директивы "acme_client"; позволяет запрашивать мультидоменные сертификаты, держа открытым только HTTPS-порт. *) Добавление: информация об ACME-клиентах и процедуре получения сертификата в разделе "/status/http/acme_clients/" API статистики (с поддержкой Prometheus). *) Добавление: добавлена поддержка Encrypted Client Hello (ECH) в HTTP и stream SSL-модулях; директива "ssl_encrypted_hello_key" позволяет задать файл с приватным ключом; переменная "$ssl_encrypted_hello" содержит информацию об использовании ECH. Спасибо Максиму Дунину (freenginx). *) Добавление: конвертация формата изображения с помощью параметра "convert" директивы "image_filter". *) Добавление: поддержка форматов AVIF и HEIC в модуле Image Filter. *) Добавление: поддержка PROXY-протокола второй версии в stream-модуле в сторону проксируемых серверов с возможностью передачи произвольных значений через TLV-записи с помощью директив "proxy_protocol_tlv", в которых можно указывать строки с переменными. *) Добавление: переменная "$upstream_request_method", содержащая метод запроса к проксируемому серверу, который может отличаться от метода запроса клиента при использовании кэширования или директивы "proxy_method"; позволяет легко избежать распространенной проблемы в конфигурациях, когда на GET-запрос возвращается закэшированный пустой HEAD-ответ, а также избежать кэширования HEAD и GET отдельно. *) Добавление: теперь HTTP-верификация в ACME может работать без блоков "server" с директивой "listen 80" в конфигурации; при необходимости слушающий порт можно изменить с помощью новой директивы "acme_http_port". *) Добавление: возможность подсчета количества элементов в списках и объектах при экспорте метрик Prometheus; пути, оканчивающиеся косой чертой, теперь возвращают количество элементов в соответствующей коллекции API. *) Добавление: переменная "$sent_body", содержащая тело ответа подзапроса или запроса от клиентского модуля. *) Добавление: поддержка методов аутентификации XOAUTH2 и OAUTHBEARER в почтовом прокси-сервере. Спасибо Rob Mueller и Максиму Дунину (freenginx). *) Добавление: параметр "route" директивы "sticky" теперь может содержать произвольные строки с любым количеством переменных. *) Добавление: в модуле ACME автоматически вычисляется приблизительный размер получаемого сертификата, что устраняет необходимость увеличивать параметр "max_cert_size" директивы "acme_client" в случаях выпуска сертификата с очень большим количеством доменов; параметр оставлен для случаев, когда ручная настройка всё же понадобится. *) Добавление: переменная "$upstream_cache_key", содержащая используемый ключ кэширования. Спасибо Кириллу Коринскому и Максиму Дунину (freenginx). *) Добавление: поддержка сборки с SSL-библиотекой AWS-LC. Спасибо Петру Сикоре (piotr at aviatrix.com). *) Добавление: в Makefile добавлена цель "test", запускающая тесты. *) Добавление: вся функциональность nginx 1.29.3, за исключением директив "add_header_inherit" и "add_trailer_inherit", качество проработки которых крайне низкое. *) Исправление: процедуры перезагрузки конфигурации и обновления исполняемого файла на лету теперь работают штатно с HTTP/3-соединениями; реализован корректный роутинг соединений ко всем существующим процессам при помощи модуля BPF. *) Исправление: если все сервера в upstream-группе оказывались недоступны или возвращали ошибку, то ошибочный ответ последнего мог посчитаться успешным несмотря на настройки директивы "proxy_next_upstream". *) Исправление: когда путь в "try_files" был короче, чем префикс в соответствующем блоке "location", использование "proxy_pass" с URI могло приводить к падению рабочего процесса; исправление портировано из nginx 1.29.4. *) Исправление: если в блоке "stream" не было ссылающихся на ACME-клиент директив "acme", то при указании в нём соответствующих переменных "$acme_cert_*" конфигурация не принималась с ошибкой "unknown variable"; проблема появилась в 1.10.3. *) Исправление: если было настроено сохранение индекса кэша в файл, тестирование конфигурации во время работы могло завершаться ошибками типа "[alert] mmap() failed (17: File exists)" и "[alert] munmap() failed (22: Invalid argument)". *) Исправление: директива "proxy_method" игнорировалась при срабатывании директивы "proxy_cache_convert_head on". *) Исправление: длительность тайм-аута, задаваемого опцией "fail_timeout" директивы "server" блока "upstream", была на 1 секунду больше, чем указано. *) Исправление: Angie не собирался на NetBSD 10.0. Спасибо Максиму Дунину (freenginx). *) Исправление: загрузка модулей, собранных для Angie PRO, могла приводить к некорректной работе и падениям из-за несовместимости ABI; теперь подобные ошибочные конфигурации запрещены, и выдается соответствующее сообщение об ошибке. Изменения в Angie 1.10.3 13.11.2025 *) Безопасность: обработка специально созданного логина/пароля при использовании метода аутентификации "none" в SMTP-модуле могла приводить к отправке серверу аутентификации части содержимого памяти рабочего процесса (CVE-2025-53859); исправление портировано из nginx 1.29.1. *) Исправление: если при использовании опции "renew_on_load" директивы "acme_client" присутствовал ранее полученный сертификат, то он не загружался, что могло ограничивать работоспособность до окончания обновления сертификата; если сертификат отсутствовал, то попытки получения нового завершались ошибкой "[alert] lseek() failed (9: Bad file descriptor)". *) Исправление: если ACME-клиент использовался в блоке "stream", но не в блоке "http", он деактивировался с предупреждением "[warn] ACME client .. is defined but not used" и не получал сертификата. *) Исправление: если все директивы "acme_client" содержали параметр "enabled=off" и соответствующие переменные "$acme_cert_*" использовались в конфигурации, то Angie не запускался, сообщая об ошибке "[emerg] unknown acme_cert_* variable". *) Исправление: если ACME-клиент использовался в блоке "stream", который располагался перед блоком "http", то Angie не запускался, сообщая об ошибке "[emerg] ACME client .. is not defined but referenced". *) Исправление: некоторые конфигурации блока "client" могли вызывать падение рабочих процессов при использовании переменных, связанных с отсутствующим в данном случае входящим соединением. Изменения в Angie 1.10.2 21.08.2025 *) Исправление: настройки прокси-модуля в блоке "http" могли нарушать работу модулей, которые используют блок "client" для исходящих запросов; проблема появилась в 1.10.0. *) Исправление: включение "proxy_ignore_client_abort" совместно с модулями, использующими блок "client" для исходящих запросов, могло приводить к падению рабочих процессов; проблема появилась в 1.10.0. *) Исправление: если в группе проксируемых серверов был ранее сконфигурирован один сервер, то серверы, добавленные через Docker API, могли не участвовать в балансировке. *) Исправление: если единственный сервер в группе проксируемых серверов был добавлен посредством Docker API, то в случае признания его недоступным он мог исключаться из балансировки. Изменения в Angie 1.10.1 17.07.2025 *) Изменение: директивы, заданные на уровне блока "client", теперь могут наследоваться только в явно объявленных внутри него блоках "location" и не оказывают влияния на настройки других модулей, неявно использующих блок "client" для исходящих запросов. *) Добавление: поддержка нескольких блоков "client" позволяет сгруппировать общие настройки для разных блоков "location" внутри каждого из них, что помогает избежать дублирования конфигурации. *) Исправление: параметр "reuseport" в директиве "listen" приводил к тому, что все соединения на указанный адрес и порт обслуживались только одним рабочим процессом; проблема появилась в 1.10.0. *) Исправление: HTTP/3-согласование с проксируемым сервером могло завершаться ошибкой при использовании библиотеки OpenSSL версии 3.5.0 или выше, если на сервере был активен режим "retry" QUIC-протокола. *) Исправление: сборка модулей HTTP/2 и HTTP/3 компилятором GCC 15 завершалась ошибкой. *) Исправление: сборка компилятором GCC с флагом -O3 могла завершаться ошибкой. Изменения в Angie 1.10.0 03.07.2025 *) Добавление: автоматическое получение и динамическое обновление групп проксируемых серверов на основе меток Docker-контейнеров (или Podman), настраиваемое с помощью директивы "docker_endpoint"; это позволяет на указанном Docker API в реальном времени отслеживать запуск и остановку контейнеров и, соответственно, добавлять или удалять их адреса из списка "upstream" согласно прописанным в них специальным меткам и без перезагрузки конфигурации. *) Добавление: поддержка автоматического получения TLS-сертификатов по протоколу ACME в stream-модуле, настраиваемое с использованием директивы "acme" и переменных вида "$acme_cert_*" и "$acme_cert_key_*". *) Добавление: поддержка приема соединений по протоколу Multipath TCP (MPTCP), включаемая с помощью опции "multipath" директивы "listen". Спасибо Максиму Дунину (freenginx), Максиму Дурову и Энтони Дорену. *) Добавление: блок "client", позволяющий задавать дополнительную конфигурацию для внутренних HTTP-запросов, исходящих от различных модулей. *) Добавление: вся функциональность nginx 1.27.5, включая контроль перегрузки CUBIC в соединениях QUIC. Изменения в Angie 1.9.1 29.05.2025 *) Добавление: возможность задать в директиве "acme_dns_port" не только номер порта, но и IP-адрес; поддерживаются IPv4 и IPv6. *) Исправление: одновременное наличие в директивах "server_name" wildcard-домена и совпадающих с ним доменов третьего уровня приводило к ошибке ACME-сервера при выпуске сертификата для этих доменов в рамках одного ACME-клиента. *) Исправление: в stream-модуле после успешного соединения с проксируемым сервером во время пассивной проверки его статус в API статистики ошибочно продолжал отображаться как "unavailable" до завершения сессии. *) Исправление: запросы HTTP/3 могли зависать и завершаться по таймауту; исправление портировано из nginx 1.29.0. *) Исправление: ранняя ошибка при установлении соединения HTTP/3 с проксируемым сервером могла приводить к падению рабочего процесса. *) Исправление: при проксировании по протоколу HTTP/3 число активных соединений могло отображаться в статистике некорректно. Изменения в Angie 1.9.0 11.04.2025 *) Добавление: возможность задать файл в директиве "proxy_cache_path", в который между запусками сервера будет сохраняться содержимое зоны разделяемой памяти с индексом кэша; что избавляет от необходимости подгружать кэш после перезагрузки и позволяет практически сразу вернуть сервер в работу. *) Добавление: поддержка механизма TLS 1.3 Early Data (0-RTT) в stream-модуле с помощью директивы "ssl_early_data". *) Добавление: новый статус "busy" у проксируемых серверов в API статистики, означающий, что число запросов на сервер достигло ограничения, заданного опцией "max_conns". *) Добавление: параметр "uri=" в директиве "acme_hook", который позволяет переопределять строку запроса к внешнему приложению, в том числе, используя переменные. *) Добавление: параметр "renew_on_load" директивы "acme_client", позволяющий форсировать обновление сертификата при загрузке конфигурации. *) Добавление: отображение даты и времени сборки в поле "build_time" объекта "/status/angie" API статистики, а также в выводе ключа командной строки "-V". *) Добавление: вся функциональность nginx 1.27.4, за исключением директивы "keepalive_min_timeout" (аналогичный функционал существует с версии 1.8.0). *) Изменение: параметр "enabled=off" в директиве "acme_client" теперь отключает только обновление сертификата для данного клиента, но сохраняет весь остальной функционал; так, остается возможность использовать ключ и сертификат (при наличии) через переменные $acme_cert_*, а использование переменных $acme_hook_* и директив "acme" - не приводит к ошибкам. *) Изменение: ошибка "no valid domain name defined for ACME client" теперь возникает, только если на ACME-клиент есть ссылка из директивы "acme" в блоке "server", но ни один из доменов этого сервера не соответствует требованиям ACME. *) Исправление: при сборке с поддержкой NTLS наследование директив "proxy_ssl_certificate" и "proxy_ssl_certificate_key" с переменными работало некорректно. Изменения в Angie 1.8.3 02.04.2025 *) Исправление: статистика "status_zone" в блоке "server" HTTP-модуля могла считаться некорректно, если запросы попадали в разные зоны статистики в рамках одного соединения или на раннем этапе обработки запроса происходила ошибка; проблема появилась в 1.8.2. Изменения в Angie 1.8.2 13.02.2025 *) Безопасность: недостаточная проверка в обработке виртуальных серверов при использовании SNI в TLSv1.3 позволяла повторно использовать SSL-сессию в контексте другого виртуального сервера, чтобы обойти проверку клиентских SSL-сертификатов (CVE-2025-23419); исправление портировано из nginx 1.27.4. *) Исправление: запросы к API для получения значений статистики из отдельной зоны, которая была задана через переменные, могли приводить к зацикливанию рабочего процесса. *) Исправление: HTTP/3-запросы не учитывались в зонах статистики; проблема появилась в 1.8.0. *) Исправление: TLS-согласования по протоколу QUIC не учитывались в статистике по SSL. *) Исправление: использование доменных имён, начинающихся с точки, в директиве "server_name" могло привести к ошибке обновления сертификата по протоколу ACME. Изменения в Angie 1.8.1 28.12.2024 *) Исправление: использование директивы "status_zone" в блоке "server" HTTP-модуля приводило к избыточному логированию пустых запросов в "access_log" во время TLS-согласований; проблема появилась в 1.8.0. *) Исправление: ошибки декодирования потока HTTP/3 могли приводить к падению рабочего процесса при закрытии QUIC-соединения; исправление портировано из nginx 1.27.4. *) Исправление: отправка пакетов с согласованием версии протокола QUIC могла привести к бесконечному циклу обмена пакетами; исправление портировано из nginx 1.27.4. *) Исправление: использование DNS-валидации без хуков в ACME-модуле на некоторых конфигурациях могло привести к падению рабочего процесса. Изменения в Angie 1.8.0 19.12.2024 *) Изменение: при плавном завершении старых рабочих процессов keepalive-соединения теперь закрываются только после истечения таймаута, заданного директивой "lingering_timeout"; такое поведение позволяет предотвратить возможные ошибки на клиенте при получении ответа в этот момент. Спасибо Максиму Дунину (freenginx). *) Изменение: отключено кэширование значений переменных stream-модуля "$ssl_server_name", "$ssl_server_cert_type", "$ssl_preread_protocol" и "$ssl_preread_server_name", что позволит получить актуальные значения при использовании виртуальных серверов. *) Добавление: поддержка валидации "DNS-01" посредством ответа на DNS-запрос от ACME-сервера, что позволяет автоматически запрашивать сертификаты любых типов, в том числе wildcard. *) Добавление: система внешних вызовов в модуле ACME, настраиваемая с помощью директивы "acme_hook", которая позволяет обеспечить валидацию доменных имен посредством внешнего обработчика для интеграции с различными сервисами и провайдерами DNS-хостинга. *) Добавление: ACME-модуль выводит в лог дополнительную информацию: точная причина обновления сертификата, полный список доменов, идентификатор аккаунта пользователя, длительные периоды неактивности (например, во время опросов), какой домен выполняет валидацию; такая информация позволяет легче диагностировать проблемы на этапе перевыпуска сертификатов, а также прописывать DNS-запись CAA. *) Добавление: параметр "account_key" в директиве "acme_client", позволяющий переиспользовать существующий ключ аккаунта ACME-сервера, а не генерировать новый автоматически. *) Добавление: поддержка переменных в директиве "status_zone" в модулях HTTP и stream позволяет динамически распределять статистику по нескольким зонам в рамках одного блока "location" или "server"; это, в частности, пригодится для случая, когда один блок "server" обрабатывает несколько виртуальных хостов. *) Добавление: совместимость HTTP-модуля сжатия GZip с версиями библиотеки zlib-ng 2.2.0 и выше, которые ранее могли приводить к появлению в логе ошибок вида "[alert] gzip filter failed to use preallocated memory". *) Добавление: директива "max_headers", ограничивающая максимальное количество полей заголовка в HTTP-запросе для лучшей защиты от DoS-атак. Спасибо Максиму Дунину (freenginx) и Максиму Евменкину. *) Добавление: директивы "http3_max_table_capacity" и "proxy_http3_max_table_capacity" для настройки ограничения на размер динамической таблицы сжатия заголовка в HTTP/3. *) Добавление: поддержка кросс-компиляции - система сборки теперь может использовать скрипт-обертку для запуска автотестов, что позволяет подготовить сборку без запуска тестовых программ непосредственно на целевой платформе. *) Добавление: вся функциональность nginx 1.27.3. *) Исправление: HTTP/3-клиенты могли отключаться по таймауту при использовании 0-RTT; исправление портировано из nginx 1.27.4. *) Исправление: проксирование по HTTP/3 с использованием переменных в директиве "proxy_pass" и без указания блока "upstream" могло приводить к падению рабочего процесса. *) Исправление: кэширование HTTP/3-ответов при использовании динамической таблицы сжатия заголовка могло привести к падению рабочего процесса. *) Исправление: некоторые SSL-рукопожатия могли не учитываться в счетчиках статистики для stream-модуля. *) Исправление: настройки HTTP/3-проксирования указанные на уровне "http" или "server" могли игнорироваться. *) Исправление: при проксировании по протоколу HTTP/3 c включенной поддержкой NTLS директива "proxy_ssl_certificate" не работала. Изменения в Angie 1.7.0 19.09.2024 *) Изменение: обновлены текстовые описания кодов HTTP-ответов в соответствии с RFC 9110. Спасибо Максиму Дунину (freenginx) и Михилу В. Бейену. *) Изменение: теперь перед HTTP-запросом допускается не более одной пустой строки для улучшения защиты против DoS-атак. Спасибо Максиму Дунину (freenginx). *) Изменение: запрещены имена полей заголовка HTTP/1.x без двоеточия на конце; такие некорректные заголовки от клиента или проксируемого сервера теперь будут приводить к возврату ошибки. Спасибо Максиму Дунину (freenginx) и Максиму Евменкину. *) Изменение: при чтении тела запроса с использованием HTTP/1.1 "chunked transfer encoding" суммарный размер игнорируемых "chunk extensions" и полей "trailer header" теперь ограничен директивой "client_max_body_size" для улучшения защиты против DoS-атак. Спасибо Максиму Дунину (freenginx) и Бартеку Новотарскому. *) Изменение: MIME-тип в файле конфигурации "mime.types" для расширения bmp изменён на "image/bmp", для расширения rar - на "application/vnd.rar", а для расширений deb и udeb теперь указан "application/vnd.debian.binary-package". Спасибо Юрию Изоркину. *) Добавление: принудительное закрытие соединений к проксируемому серверу при удалении его из группы, настраиваемое с помощью директив "proxy_connection_drop", "grpc_connection_drop", "fastcgi_connection_drop", "scgi_connection_drop" и "uwsgi_connection_drop". *) Добавление: счетчики отдельных типов отправленных DNS-запросов в API статистики резолвера, собираемой параметром "status_zone" директивы "resolver". *) Добавление: переменная "$ssl_server_cert_type", содержащая тип выбранного сертификата при приеме TLS-соединения. *) Добавление: отключение создания PID-файла с помощью параметра "off" в директиве "pid", что может быть полезным для неизменяемых образов и при непосредственном управлении менеджером процессов. Спасибо Максиму Дунину (freenginx). *) Добавление: создание PID-файла теперь выполняется атомарно через промежуточный временный файл, что исключает момент, когда файл уже появился в директории, но еще пуст, и позволяет внешним программам проще и надежнее с ним работать. *) Добавление: теперь при переконфигурации не делается попытка пересоздать PID-файл, если имя в директиве "pid" изменилось, но указывает на тот же файл через симлинки, что, в частности, позволяет избежать проблем в системах во время миграции с "/var/run/angie.pid" на "/run/angie.pid". Спасибо Максиму Дунину (freenginx). *) Добавление: ошибки записи в syslog теперь логгируются не чаще одного раза в секунду, что помогает предотвратить засорение логов подобными сообщениями в случаях перегрузки или сбоя syslog-сервера. Спасибо Максиму Дунину (freenginx). *) Добавление: в почтовом прокси-сервере ограничено максимальное количество команд в процессе аутентификации, задаваемое директивой "max_commands", для улучшения защиты против DoS-атак. Спасибо Максиму Дунину (freenginx). *) Добавление: опция "--feature-cache" скрипта ./configure для кэширования результатов его работы с целью оптимизации массовой сборки модулей или кросс-компиляции. *) Добавление: вся функциональность nginx 1.27.1. *) Исправление: при запуске под systemd могли возникать ошибки "PID file ... not readable (yet?) after start" и "Failed to parse PID from file...". Спасибо Максиму Дунину (freenginx). Изменения в Angie 1.6.2 16.08.2024 *) Безопасность: обработка специально созданного файла MP4-модулем могла приводить к падению рабочего процесса (CVE-2024-7347); исправление портировано из nginx 1.27.1. Изменения в Angie 1.6.1 08.08.2024 *) Добавление: новый счётчик "passed" в статистике API директивы "status_zone" модуля "stream" отслеживает соединения, передаваемые на другие сокеты с помощью директив "pass". *) Исправление: при использовании виртуальных серверов или директивы "pass" в модуле "stream" соединения могли учитываться некорректно в API статистики. *) Исправление: на конфигурациях с 5 ACME-клиентами и более могли происходить падения рабочих процессов; проблема появилась в 1.6.0. *) Исправление: обработка закэшированных ответов с заголовком "X-Accel-Redirect" могла приводить к падению рабочего процесса. Спасибо Максиму Дунину (freenginx) и Иржи Сетничке. Изменения в Angie 1.6.0 28.06.2024 *) Добавление: директива "sticky" и сопутствующие настройки в блоке "upstream" stream-модуля, позволяющие задать режим привязки сессий, при котором все соединения в рамках сессии будут направляться на один и тот же сервер. *) Добавление: извлечение значений Cookie из RDP-соединений с помощью директивы "rdp_preread" stream-модуля в переменные "$rdp_cookie" и "$rdp_cookie_NAME", что позволяет логгировать и привязывать RDP-сеансы клиентов к одним и тем же серверам при балансировке нагрузки. *) Добавление: возможность указать несколько директив "acme" в одном блоке "server", что позволяет настраивать получение сертификатов сразу двух типов в рамках данного виртуального сервера. *) Добавление: ключи командной строки "-m" и "-M" для отображения списка встроенных и загруженных модулей. *) Добавление: поддержка BoringSSL в модуле ACME. *) Добавление: вся функциональность nginx 1.27.0, включая поддержку виртуальных серверов в модуле "stream" и директиву "pass", позволяющую передавать принятые соединения на обработку в другие слушающие сокеты, в том числе модулей HTTP и Mail. *) Исправление: запрос сертификата по протоколу ACME мог завершаться ошибкой в некоторых конфигурациях с сообщением в логе вида "[alert] getsockname() failed (9: Bad file descriptor)". *) Исправление: запрос сертификата с большим количеством доменных имен по протоколу ACME мог завершаться ошибкой с сообщением в логе вида "[error] JSON parser error". *) Исправление: ACME-клиенты в конфигурациях с несколькими директивами "error_log" могли выводить сообщения в несоответствующие логи. Изменения в Angie 1.5.2 31.05.2024 *) Безопасность: при использовании HTTP/3 обработка специально созданной QUIC-сессии могла приводить к падению рабочего процесса, отправке клиенту содержимого памяти рабочего процесса на системах с MTU больше 4096 байт и иметь другие последствия (CVE-2024-32760, CVE-2024-31079, CVE-2024-35200, CVE-2024-34161); исправление портировано из nginx 1.26.1. Изменения в Angie 1.5.1 16.05.2024 *) Изменение: теперь ACME-клиенты не игнорируют ранее сохраненные сертификаты, если они просрочены или выпущены для отличающегося списка доменных имён, а используют их, пока идет обновление. *) Исправление: механизм "proxy_next_upstream" работал некорректно при использовании опции "resolve" директивы "server" в блоке "upstream", если количество полученных IP-адресов отличалось от числа заданных серверов. *) Исправление: при запросе сертификата по протоколу ACME могла произойти ошибка сегментации в рабочем процессе. *) Исправление: механизм "slow_start" не срабатывал при проксировании TCP-соединений в модуле "stream". *) Исправление: запросы HTTP/3 могли завершаться с ошибкой, если они были присланы как TLS 1.3 early data; проблема появилась в 1.4.0. *) Исправление: HTTP/3-соединение могло закрываться преждевременно при использовании 0-RTT в QUIC. *) Исправление: при чтении тела запроса из быстрого соединения было возможно чтение в течение долгого времени. Спасибо Максиму Дунину (freenginx). Изменения в Angie 1.5.0 27.03.2024 *) Добавление: начальная поддержка автоматического получения и обновления сертификатов по протоколу ACME, конфигурируемая с помощью директив "acme_client" и "acme", а также переменных вида "$acme_cert_*" и "$acme_cert_key_*". *) Добавление: настройка автоматического перенаправления для добавления слеша в конец URI запроса с помощью директивы "auto_redirect". *) Добавление: вывод содержащих даты метрик в формате временных меток Unix вместо ISO 8601 для использования в Prometheus, а также в JSON API при запросе с аргументом "?date=epoch". *) Добавление: новый статус "recovering" у проксируемых серверов в API статистики, означающий, что сервер медленно восстанавливается после сбоя согласно опции "slow_start". *) Добавление: теперь ключ "-V" показывает также релевантную версию nginx, что полезно для совместимости со сторонними утилитами, в частности certbot. Спасибо AdvTechnoKing. *) Добавление: вся функциональность nginx 1.25.4. *) Исправление: если был зайдествован механизм переиспользования SSL-сессий ("proxy_ssl_session_reuse"), то при динамическом обновлении списка проксируемых серверов могла происходить утечка из зоны разделяемой памяти ("zone"), настроенной для соответствующего блока "upstream". Изменения в Angie 1.4.1 15.02.2024 *) Безопасность: при использовании HTTP/3 в рабочем процессе во время обработки специально созданной QUIC-сессии могла произойти ошибка сегментации (CVE-2024-24989); при этом Angie, начиная ещё с версии 1.4.0, не подвержен уязвимости CVE-2024-24990. Изменения в Angie 1.4.0 12.12.2023 *) Добавление: поддержка HTTP/3-соединений с upstream-серверами в прокси-модуле HTTP, допускающая использование клиентами произвольных версий HTTP. Конфигурация осуществляется с помощью директивы "proxy_http_version" и набора директив "proxy_quic_" и "proxy_http3_". *) Добавление: механизм плавного ввода проксируемого сервера в работу после сбоя с помощью опции "slow_start" директивы "server" в блоке "upstream". *) Добавление: директива "mqtt_preread" модуля "stream", позволяющая помещать имя пользователя и идентификатор клиента из пакета CONNECT протокола MQTT в переменные $mqtt_preread_username и $mqtt_preread_clientid. *) Добавление: ограничение скорости отдачи MP4-файлов клиенту пропорционально битрейту с помощью директив "mp4_limit_rate" и "mp4_limit_rate_after", снижающее нагрузку на полосу пропускания. *) Добавление: вся функциональность nginx 1.25.3. *) Исправление: если проксируемый сервер был единственным в группе, то он мог некорректно учитываться как "unavailable" в API статистики даже после восстановления работоспособности. Изменения в Angie 1.3.2 23.11.2023 *) Исправление: были возможны некорректные значения метрик в формате Prometheus, в значениях которых использовались отличные от $p8s_value переменные; на практике проблема могла наблюдаться с "angie_http_upstreams_peers_state" и "angie_stream_upstreams_peers_state" из стандартного шаблона "prometheus_all.conf". *) Исправление: некоторые попытки соединения с проксируемыми серверами могли не учитываться соответствующим образом в API статистики, если ошибка происходила моментально; проблема появилась в 1.3.0. Изменения в Angie 1.3.1 18.10.2023 *) Безопасность: добавлены дополнительные ограничения при обработке потоков HTTP/2, чтобы лучше противостоять DoS-атаке "HTTP/2 Rapid Reset" (CVE-2023-44487). Изменения в Angie 1.3.0 19.09.2023 *) Добавление: возможность указывать в директиве "location" несколько строк для сопоставления, что позволяет объединить несколько блоков "location" с одинаковыми настройками и, таким образом, упростить конфигурацию за счет уменьшения дублирования. *) Добавление: экспорт различных метрик статистики в формате Prometheus с гибко настраиваемыми шаблонами при помощи новых директив "prometheus" и "prometheus_template". *) Добавление: детальная информация и метрики по группам проксируемых stream-серверов в интерфейсе статистики, предоставляемом директивой "api". *) Добавление: опция "resolve" директивы "server" в блоке "upstream" модуля "stream", позволяющая отслеживать изменения списка IP-адресов, соответствующего доменному имени, и автоматически обновлять его без перезагрузки конфигурации. *) Добавление: опция "service" директивы "server" в блоке "upstream" модуля "stream", позволяющая получать списки адресов из DNS-записей SRV, с базовой поддержкой приоритета. *) Добавление: получение содержимого конфигурационных файлов, с которыми было запущено текущее поколение рабочих процессов, в интерфейсе, предоставляемом директивой "api" при включении директивы "api_config_files". *) Добавление: отображение номера поколения конфигурации в именах процессов, что позволяет с помощью утилиты "ps" отслеживать успех перезагрузок конфигурации и количество поколений рабочих процессов с предыдущими версиями конфигурации. *) Добавление: вся функциональность nginx 1.25.2. *) Исправление: сборка завершалась ошибкой при использовании опций ./configure "--without-http_upstream_zone_module" или "--without-stream_upstream_zone_module"; проблема появилась в 1.2.0. *) Изменение: теперь при загрузке конфигурации OpenSSL используется appname "angie". Изменения в Angie 1.2.0 30.05.2023 *) Добавление: директива "sticky" и сопутствующие настройки в блоке "upstream" HTTP-модуля, позволяющие задать режим привязки сессий, при котором все запросы в рамках сессии будут направляться на один и тот же сервер. *) Добавление: переменная $upstream_sticky_status, принимающая значения "NEW", "HIT" или "MISS" в зависимости от успеха направления запроса на релевантный проксируемый сервер с включенной привязкой сессий. *) Добавление: поддержка NTLS в HTTP и stream модулях при использовании TLS библиотеки TongSuo, которую можно включить опцией сборки "--with-ntls" и сконфигурировать с помощью соответствующих директив "ssl_ntls" и "proxy_ssl_ntls". *) Добавление: в HTTP и stream прокси-модулях теперь можно настраивать несколько сертификатов разного типа (RSA и ECDSA) и соответствующих им ключей, используя директивы "proxy_ssl_certificate" и "proxy_ssl_certificate_key". *) Добавление: вывод версии и сборки в отображаемом имени "master" процесса, что позволяет с помощью утилиты "ps" получить эту информацию о работающем экземпляре сервера. *) Добавление: возможность сжатия модулем gzip ответов со статусом "207 Multi-Status". Спасибо DBotThePony. *) Добавление: вся функциональность nginx 1.25.0, включая поддержку HTTP/3. Изменения в Angie 1.1.0 24.01.2023 *) Добавление: опция "resolve" директивы "server" в блоке "upstream" HTTP-модуля, позволяющая отслеживать изменения списка IP-адресов, соответствующего доменному имени, и автоматически обновлять его без перезагрузки конфигурации. *) Добавление: опция "service" директивы "server" в блоке "upstream" HTTP-модуля, позволяющая получать списки адресов из DNS SRV записей, с базовой поддержкой приоритета. *) Добавление: детальная информация и метрики по группам проксируемых HTTP-серверов в интерфейсе статистики, предоставляемом директивой "api". *) Добавление: autoindex выводит листинги директорий в естественном порядке. *) Добавление: вся функциональность nginx 1.23.3. *) Исправление: сборка завершалась ошибкой из-за ложного предупреждение компилятора при использовании GCC 9 и старее с оптимизацией -O2 и выше. Изменения в Angie 1.0.0 27.10.2022 *) Добавление: директива "api", реализующая HTTP RESTful интерфейс для получения в формате JSON базовой информации о веб-сервере, а также статистики по клиентским соединениям, зонам разделяемой памяти, DNS-запросам, HTTP-запросам, кэшу HTTP-ответов, сессиям модуля stream и зонам модулей limit_conn/limit_req. *) Добавление: директива "status_zone" в модуле http для указания зоны сбора статистики по запросам в "server" и "location" контекстах. *) Добавление: директива "status_zone" в модуле stream для указания зоны сбора статистики по TCP/UDP сессиям. *) Добавление: параметр status_zone директивы resolver для указания зоны сбора статистики по DNS-запросам. *) Добавление: переменная $angie_version, содержащая версию Angie. *) Добавление: вся функциональность nginx 1.23.2.