Выпуск nginx 1.19.7, njs 0.5.1 и NGINX Unit 1.22.0

Сформирован выпуск основной ветки nginx 1.19.7, в рамках которой продолжается развитие новых возможностей (в параллельно поддерживаемой стабильной ветке 1.18 вносятся только изменения, связанные с устранением серьёзных ошибок и уязвимостей).

Основные изменения:

  • При исчерпании рабочим процессом свободных соединений, nginx теперь закрывает не только keepalive-соединения, но и соединения в состоянии ожидания закрытия сокета («lingering close»).
  • Код обработки соединений в HTTP/2 приближен к реализации HTTP/1.x. Поддержка отдельных настроек «http2_recv_timeout», «http2_idle_timeout» и «http2_max_requests» прекращена в пользу общих директив «keepalive_timeout» и «keepalive_requests».
  • Удалены настройки «http2_max_field_size» и «http2_max_header_size», вместо которых следует использоватт «large_client_header_buffers».

Одновременно состоялся выпуск njs 0.5.1, интерпретатора языка JavaScript для веб-сервера nginx. Интерпретатор njs реализует стандарты ECMAScript и позволяет расширять возможности nginx по обработке запросов с помощью скриптов в конфигурации. Скрипты могут использоваться в файле конфигурации для определения расширенной логики обработки запросов, формирования конфигурации, динамической генерации ответа, модификации запроса/ответа или быстрого создания заглушек с решением проблем в web-приложениях.

В новой версии добавлена директива «js_header_filter», позволяющая задать JavaScript-функцию для фильтрации и изменения произвольных заголовков ответа:

     js_import foo.js;       location / {         js_header_filter foo.filter;         proxy_passhttp://127.0.0.1:8081/;     }     foo.js:     function filter(r) {       var cookies = r.headersOut['Set-Cookie'];       var len = r.args.len ? Number(r.args.len) : 0;       r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len);     }       export default {filter};  

Также добавлен метод ngx.fetch (), реализующий API Fetch, который предоставляет функциональность HTTP-клиента. Метод поддерживает обработку опций body, headers, buffer_size и max_response_body_size. В возвращаемом объекте Response поддерживаются методы arrayBuffer (), bodyUsed, json (), headers, ok, redirect, status, statusText, text (), type и url, а в объекте Header методы get (), getAll () и has ().

    function fetch(r) {        ngx.fetch('http://nginx.org/')        .then(reply => reply.text())        .then(body => r.return(200, body))        .catch(e => r.return(501, e.message));     }  

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

В новом выпуске NGINX Unit основное внимание было уделено повышению стабильности, расширению средств для тестирвония и исправлению ошибок. В формируемых для Linux пакетах изменены пользователь и группа, под которыми запускается NGINX Unit. Вместо nobody: nobody для процессы теперь выполняются под отдельным пользователем unit в группе unit. Обеспечена совместимость с API Stream объектов ServerRequest и ServerResponse из модуля Node.js. В опции «path» для Python-приложений разрешено указание нескольких каталогов.

Источник: http://www.opennet.ru/opennews/art.shtml? num=54602

© OpenNet