È stata rilasciata la versione principale nginx 1.19.7, che continua a sviluppare nuove funzionalità (nella branca stabile 1.18, supportata in parallelo, vengono apportate solo modifiche per correggere gravi errori e vulnerabilità).
Principali modifiche:
- Quando il processo di lavoro esaurisce le connessioni disponibili, nginx ora chiude non solo le connessioni keepalive, ma anche le connessioni in stato di attesa per la chiusura del socket («lingering close»).
- Il codice di gestione delle connessioni in HTTP/2 è stato avvicinato all'implementazione di HTTP/1.x. Il supporto per le impostazioni separate «http2_recv_timeout», «http2_idle_timeout» e «http2_max_requests» è stato interrotto a favore delle direttive generali «keepalive_timeout» e «keepalive_requests».
- Le impostazioni «http2_max_field_size» e «http2_max_header_size» sono state rimosse, e invece si dovrebbe utilizzare «large_client_header_buffers».
È stato rilasciato anche njs 0.5.1, un interprete del linguaggio JavaScript per. il server web. nginx. L'interprete njs implementa standard ECMAScript e consente di estendere le capacità di nginx nel gestire le richieste tramite script nella configurazione. Gli script possono essere utilizzati nel file di configurazione per definire una logica di elaborazione delle richieste avanzata, generare dinamicamente risposte, modificare richieste/riposte o creare rapidamente stub per risolvere problemi nelle applicazioni web.
Nella nuova versione è stata aggiunta la direttiva «js_header_filter», che consente di specificare una funzione JavaScript per filtrare e modificare intestazioni di risposta arbitrarie: 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};
È stato anche aggiunto il metodo ngx.fetch(), che implementa l'API Fetch, fornendo funzionalità di client HTTP. Il metodo supporta l'elaborazione delle opzioni body, headers, buffer_size e max_response_body_size. Nell'oggetto restituito Response, sono supportati i metodi arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type e url, mentre nell'oggetto Header i metodi get(), getAll() e 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)); }
Si segnala anche la pubblicazione server L'applicazione NGINX Unit 1.22 offre una soluzione per l'esecuzione di web-applicazioni in vari linguaggi di programmazione (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js e Java). Sotto la gestione di NGINX Unit, è possibile eseguire più applicazioni in diversi linguaggi di programmazione contemporaneamente, con parametri di avvio che possono essere modificati dinamicamente senza necessità di modificare i file di configurazione e riavviare. Il codice è scritto in C e distribuito con licenza Apache 2.0.
Nella nuova versione di NGINX Unit, l'attenzione è stata posta sul miglioramento della stabilità, sull'ampliamento degli strumenti per i test e sulla correzione dei bug. Nei pacchetti per Linux sono stati modificati l'utente e il gruppo sotto il quale viene eseguito NGINX Unit. Anziché nobody:nobody, i processi ora vengono eseguiti con un utente separato unit nel gruppo unit. È stata garantita la compatibilità con l'API Stream degli oggetti ServerRequest e ServerResponse dal modulo Node.js. Nelle opzioni «path» per le applicazioni Python è stata consentita l'indicazione di più directory.
Fonte: opennet.ru
