Выпуск nginx 1.25.3, njs 0.8.2 и NGINX Unit 1.31.1

Сформирован выпуск основной ветки nginx 1.25.3, в рамках которой продолжается развитие новых возможностей. В параллельно поддерживаемой стабильной ветке 1.24.x вносятся только изменения, связанные с устранением серьёзных ошибок и уязвимостей. В дальнейшем на базе основной ветки 1.25.x будет сформирована стабильная ветка 1.26. Код проекта написан на языке Си и распространяется под лицензией BSD.

Среди изменений:

  • Усилена защита от аномальной активности клиентов HTTP/2, и, в частности, от DoS-атак класса “Rapid Reset”, в которых создаётся большое число сразу сбрасываемых потоков в рамках одного соединения HTTP/2. В конфигурации по умолчанию подобные атаки упираются в лимит на число запросов на соединение “keepalive_requests” (после каждых 1000 запросов соединение будет сбрасываться) и в ограничения “limit_req“. Для более раннего реагирования на флуд запросами через большое число потоков добавлено дополнительное ограничение, не позволяющие создавать по умолчанию более 256 (2 * max_concurrent_streams) новых потоков на каждый цикл обработки событий. Новое ограничение даёт возможность начать блокировать запросы до достижения общего лимита на число одновременных потоков, например, когда потоки обрабатываются асинхронно или сбрасываются. Аналогичное изменение также вошло в состав выпуска angie 1.3.1 (форк nginx), опубликованного неделю назад.
  • Улучшено управление буферами, используемыми при автоматическом определении соединений HTTP/2.
  • Повышена производительность запуска конфигураций с большим числом директив “location”.
  • Устранено аварийное завершение рабочего процесса, наблюдаемое при попытке использования HTTP/2 без SSL.
  • Исправлена некорректная обработка возвращаемого бэкендом заголовка “Status” с пустым поясняющим текстом.
  • Устранена утечка памяти во время переконфигурирования, возникающая при сборке с библиотекой PCRE2.
  • Внесена большая порция исправлений и улучшений, связанных с поддержкой протокола HTTP/3.

Одновременно состоялся выпуск njs 0.8.2, интерпретатора языка JavaScript для веб-сервера nginx. Интерпретатор njs реализует стандарты ECMAScript и позволяет расширять возможности nginx по обработке запросов с помощью скриптов в конфигурации. Скрипты могут использоваться в файле конфигурации для определения расширенной логики обработки запросов, формирования конфигурации, динамической генерации ответа, модификации запроса/ответа или быстрого создания заглушек с решением проблем в web-приложениях. В новой версии добавлен объект console, предоставляющий методы error(), info(), log(), time(), timeEnd() и warn(). В модуль fs добавлен метод fs.existsSync().

Также можно отметить публикацию сервера приложений NGINX Unit 1.31.1, предоставляющего решение для обеспечения запуска web-приложений на различных языках программирования (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js и Java). Под управлением NGINX Unit может одновременно выполняться несколько приложений на разных языках программирования, параметры запуска которых можно изменять динамически без необходимости правки файлов конфигурации и перезапуска. Кроме исправления ошибок в новой версии в модуле Wasm разрешена загрузка данных, размером более 4 ГБ, а при ответе предоставлена возможность установки кодов состояния HTTP.

Release. Ссылка here.