A fost formată o lansare a ramurii principale nginx 1.19.7, în cadrul căreia continuă dezvoltarea de noi funcții (în ramura stabilă 1.18, care este menținută în paralel, sunt aduse doar modificări legate de corectarea erorilor critice și a vulnerabilităților).
Modificări principale:
- Când procesele de lucru epuizează conexiunile disponibile, nginx acum închide nu doar conexiunile keepalive, ci și conexiunile aflate în așteptare pentru închiderea socket-ului („lingering close”).
- Codul de procesare a conexiunilor în HTTP/2 a fost apropiat de implementarea HTTP/1.x. Suportul pentru setările separate „http2_recv_timeout”, „http2_idle_timeout” și „http2_max_requests” a fost eliminat în favoarea directivelor generale „keepalive_timeout” și „keepalive_requests”.
- Setările „http2_max_field_size” și „http2_max_header_size” au fost eliminate, iar în locul lor ar trebui să fie folosite „large_client_header_buffers”.
În același timp, a fost lansat njs 0.5.1, un interpreter JavaScript pentru server web nginx. Interpretatorul njs implementează standardele ECMAScript și permite extinderea capacităților nginx în manipularea cererilor prin intermediul scripturilor în configurație. Scripturile pot fi utilizate în fișierul de configurare pentru a defini logica extinsă de manipulare a cererilor, a genera configurația, a produce dinamic răspunsuri, a modifica cererea/responsul sau a crea rapid mock-uri pentru a rezolva probleme în aplicațiile web.
Noua versiune include directiva „js_header_filter”, care permite definirea unei funcții JavaScript pentru filtrarea și modificarea oricăror antete de răspuns: 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};
De asemenea, a fost adăugat metoda ngx.fetch(), care implementează API Fetch, oferind funcționalitatea unui client HTTP. Metoda suportă gestionarea opțiunilor body, headers, buffer_size și max_response_body_size. În obiectul returnat Response sunt suportate metodele arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type și url, iar în obiectul Header metodele get(), getAll() și 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)); }
De asemenea, poate fi menționată publicarea server aplicațiilor NGINX Unit 1.22, care oferă soluția pentru rularea aplicațiilor web în diverse limbi de programare (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js și Java). Sub gestionarea NGINX Unit, pot rula simultan mai multe aplicații în diferite limbi de programare, iar parametrii de pornire pot fi schimbați dinamic fără a fi nevoie de modificarea fișierelor de configurare și de repornire. Codul este scris în limbajul C și este distribuit sub licența Apache 2.0.
În noul episod NGINX Unit, s-a pus accent pe creșterea stabilității, extinderea instrumentelor de testare și corectarea erorilor. În pachetele create pentru Linux, au fost schimbate utilizatorul și grupul sub care rulează NGINX Unit. În loc de nobody:nobody, procesele sunt acum executate sub un utilizator separat unit în grupul unit. S-a asigurat compatibilitatea cu API-ul Stream al obiectelor ServerRequest și ServerResponse din modulul Node.js. În opțiunea „path” pentru aplicațiile Python, este permisă specificarea mai multor directoare.
Sursa: opennet.ro
