Випуск 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 обробки запитів за допомогою скриптів у конфігурації. Скрипти можуть використовуватися у файлі конфігурації для визначення розширеної логіки обробки запитів, формування конфігурації, динамічної генерації відповіді, модифікації запиту/відповіді або швидкого створення заглушок із вирішенням проблем у веб-додатках.

У новій версії додано директиву «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, що пропонує рішення для забезпечення запуску 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-додатків дозволено вказівку кількох каталогів.

Джерело: opennet.ru

Додати коментар або відгук