È stato rilasciato il versionamento principale di nginx 1.19.7, nel quale continua lo sviluppo di nuove funzionalità (nella parallela versione stabile 1.18 vengono apportate solo modifiche relative alla correzione di gravi errori e vulnerabilità).
Variazioni principali:
- Quando il processo di lavoro esaurisce le connessioni disponibili, nginx ora chiude non solo le connessioni keepalive, ma anche le connessioni in attesa di 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 specifiche «http2_recv_timeout», «http2_idle_timeout» e «http2_max_requests» è stato interrotto a favore delle direttive generali «keepalive_timeout» e «keepalive_requests».
- Sono state rimosse le impostazioni «http2_max_field_size» e «http2_max_header_size», a favore dell'utilizzo di «large_client_header_buffers».
Contemporaneamente è stata rilasciata la versione njs 0.5.1, un interprete per il linguaggio JavaScript per web nginx. L'interprete njs implementa gli standard ECMAScript e consente di estendere le capacità di nginx nella gestione delle richieste mediante script nelle configurazioni. Gli script possono essere utilizzati nel file di configurazione per definire logiche avanzate di elaborazione delle richieste, generazione di configurazioni, generazione dinamica di risposte, modifica di richieste/risposte o per 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 inoltre aggiunto il metodo ngx.fetch(), che implementa l'API Fetch, fornendo funzionalità di client HTTP. Il metodo supporta la gestione delle opzioni body, headers, buffer_size e max_response_body_size. Nell'oggetto 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)); }
È inoltre da segnalare la pubblicazione server delle applicazioni NGINX Unit 1.22, che 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 possono essere eseguite contemporaneamente più applicazioni in diversi linguaggi di programmazione, i cui parametri di avvio possono essere modificati dinamicamente senza necessità di modificare i file di configurazione e riavviare. Il codice è scritto in linguaggio C e distribuito sotto licenza Apache 2.0.
Nel nuovo rilascio di NGINX Unit, l'attenzione principale è stata posta sul miglioramento della stabilità, sull'espansione degli strumenti per il testing e sulla correzione dei bug. Nei pacchetti creati per Linux sono stati modificati l'utente e il gruppo sotto cui viene eseguito NGINX Unit. Invece di nobody:nobody, i processi ora vengono eseguiti sotto un utente separato unit nel gruppo unit. È stata garantita la compatibilità con l'API Stream degli oggetti ServerRequest e ServerResponse del modulo Node.js. Nell'opzione "path" per le applicazioni Python è consentito specificare più directory.
Fonte: opennet.ru
