gateway2/angie-Angie-1.11.8/CHANGES.ru
2026-08-14 18:56:28 +08:00

1056 lines
77 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Изменения в 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.