Издание 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_pass http://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.22 предлага решение за стартиране на уеб приложения на различни програмни езици (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js и Java). Под управлението на NGINX Unit могат да се изпълняват едновременно няколко приложения на различни програмни езици, чийто параметри за стартиране могат да се променят динамично без необходимост от редактиране на конфигурационни файлове и рестартиране. Кодът е написан на C и се разпространява под лиценз Apache 2.0.

В новото издание на NGINX Unit основното внимание е насочено към повишаване на стабилността, разширяване на средствата за тестване и коригиране на грешки. В пакетите за Linux е променен потребителят и групата, под които работи NGINX Unit. Вместо nobody:nobody, процесите сега се изпълняват под отделен потребител unit в групата unit. Осигурена е съвместимост с API Stream обектите ServerRequest и ServerResponse от модула Node.js. В опцията „path“ за Python приложенията е разрешено посочването на няколко каталога.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster