De release van de hoofdversie nginx 1.19.7 is gevormd, waarin de ontwikkeling van nieuwe mogelijkheden voortduurt (in de parallel ondersteunde stabiele tak 1.18 worden alleen wijzigingen aangebracht die verband houden met het oplossen van ernstige fouten en kwetsbaarheden).
Belangrijkste wijzigingen:
- Wanneer de werkende proces de vrije verbindingen uitput, sluit nginx nu niet alleen keepalive-verbindingen, maar ook verbindingen die zich in de staat van socket afsluiten (‘lingering close’) bevinden.
- De code voor het verwerken van verbindingen in HTTP/2 is benaderd naar de implementatie van HTTP/1.x. De ondersteuning voor afzonderlijke instellingen ‘http2_recv_timeout’, ‘http2_idle_timeout’ en ‘http2_max_requests’ is stopgezet ten gunste van algemene richtlijnen ‘keepalive_timeout’ en ‘keepalive_requests’.
- De instellingen ‘http2_max_field_size’ en ‘http2_max_header_size’ zijn verwijderd, waarvoor nu ‘large_client_header_buffers’ gebruikt moet worden.
Tegelijkertijd is versie njs 0.5.1 uitgebracht, de interpreter voor de programmeertaal JavaScript voor webserver nginx. De njs-interpreter implementeert de standaarden van ECMAScript en stelt nginx in staat om de aanvraagverwerking uit te breiden met behulp van scripts in de configuratie. Scripts kunnen in het configuratiebestand worden gebruikt om uitgebreide logica voor aanvraagverwerking te definiëren, de configuratie te vormen, dynamische antwoorden te genereren, aanvragen/antwoorden te wijzigen of snel stubs te maken voor het oplossen van problemen in webapplicaties.
In de nieuwe versie is de richtlijn ‘js_header_filter’ toegevoegd, waarmee een JavaScript-functie kan worden opgegeven voor het filteren en wijzigen van willekeurige antwoordheaders: js_import foo.js; locatie / { 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};
Ook is de methode ngx.fetch() toegevoegd, die de Fetch API implementeert en functionaliteit voor een HTTP-client biedt. De methode ondersteunt de verwerking van opties body, headers, buffer_size en max_response_body_size. In het teruggegeven Response-object ondersteunt het de methoden arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type en url, en in het Header-object de methoden get(), getAll() en 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)); }
Daarnaast kan de publicatie worden opgemerkt de server van de NGINX Unit 1.22-applicaties, die een oplossing biedt voor het draaien van webapplicaties in verschillende programmeertalen (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js en Java). Onder NGINX Unit kunnen meerdere applicaties in verschillende programmeertalen gelijktijdig draaien, waarvan de opstartparameters dynamisch kunnen worden gewijzigd zonder dat het nodig is configuratiebestanden aan te passen en opnieuw op te starten. De code is geschreven in de programmeertaal C en wordt verspreid onder de Apache 2.0-licentie.
In de nieuwste uitgave van NGINX Unit lag de focus op het verbeteren van de stabiliteit, het uitbreiden van testtools en het oplossen van fouten. In de pakketten voor Linux zijn de gebruiker en groep gewijzigd waaronder NGINX Unit wordt uitgevoerd. In plaats van nobody:nobody worden processen nu uitgevoerd onder een aparte gebruiker unit in de groep unit. Compatibiliteit met de API Stream objecten ServerRequest en ServerResponse van de Node.js module is gewaarborgd. Het is toegestaan om meerdere mappen op te geven in de optie 'path' voor Python-applicaties.
Bron: opennet.ru
