Выпуск 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, які прапануе рашэнне для забеспячэння запуску 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

Дадаць каментар