Veröffentlichung von nginx 1.19.7, njs 0.5.1 und NGINX Unit 1.22.0

Die Hauptversion von nginx 1.19.7 wurde veröffentlicht, in der die Entwicklung neuer Funktionen fortsetzt. In der stabilen Version 1.18 werden nur Änderungen zur Behebung schwerwiegender Fehler und Sicherheitsanfälligkeiten vorgenommen.

Hauptänderungen:

  • Wenn die Arbeitslast an freien Verbindungen erschöpft ist, schließt nginx nun nicht nur Keepalive-Verbindungen, sondern auch Verbindungen, die sich im Zustand des "lingering close" befinden.
  • Der Verbindungsbehandlungs-Code in HTTP/2 wurde näher an die Implementierung von HTTP/1.x angepasst. Die Unterstützung von einzelnen Einstellungen wie "http2_recv_timeout", "http2_idle_timeout" und "http2_max_requests" wurde zugunsten allgemeiner Direktiven wie "keepalive_timeout" und "keepalive_requests" eingestellt.
  • Die Einstellungen "http2_max_field_size" und "http2_max_header_size" wurden entfernt, stattdessen sollte "large_client_header_buffers" verwendet werden.

Gleichzeitig wurde njs 0.5.1 veröffentlicht, der JavaScript-Interpreter für Webserver. nginx. Der njs-Interpreter implementiert die ECMAScript-Standards und ermöglicht die Erweiterung der Funktionen von nginx zur Verarbeitung von Anfragen durch Skripte in der Konfiguration. Skripte können in der Konfigurationsdatei verwendet werden, um erweiterte Logik zur Anfrageverarbeitung, Konfigurationsbildung, dynamischen Antwortgenerierung, Anfragen-/Antwortmodifikationen oder zum schnellen Erstellen von Platzhaltern zur Problemlösung in Webanwendungen zu definieren.

In der neuen Version wurde die Direktive "js_header_filter" hinzugefügt, die es ermöglicht, eine JavaScript-Funktion zur Filterung und Änderung beliebiger Antwortheader festzulegen: 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};

Es wurde auch die Methode ngx.fetch() hinzugefügt, die die Fetch-API implementiert und Funktionen eines HTTP-Clients bereitstellt. Die Methode unterstützt die Verarbeitung der Optionen body, headers, buffer_size und max_response_body_size. Im zurückgegebenen Response-Objekt werden die Methoden arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type und url sowie im Header-Objekt die Methoden get(), getAll() und has() unterstützt. 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)); }

Außerdem kann die Veröffentlichung Server der NGINX Unit 1.22-Anwendungen erwähnt werden, die eine Lösung zur Bereitstellung von Webanwendungen in verschiedenen Programmiersprachen (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js und Java) bietet. Unter der Verwaltung von NGINX Unit können mehrere Anwendungen in verschiedenen Programmiersprachen gleichzeitig ausgeführt werden, deren Startparameter dynamisch geändert werden können, ohne dass Konfigurationsdateien bearbeitet oder ein Neustart durchgeführt werden muss. Der Code ist in C geschrieben und wird unter der Lizenz Apache 2.0 veröffentlicht.

In der neuen Ausgabe von NGINX Unit lag der Schwerpunkt auf der Verbesserung der Stabilität, der Erweiterung der Testmöglichkeiten und der Behebung von Fehlern. In den für Linux erstellten Paketen wurden der Benutzer und die Gruppe geändert, unter denen NGINX Unit ausgeführt wird. Anstelle von nobody:nobody werden die Prozesse jetzt unter dem separaten Benutzer unit in der Gruppe unit ausgeführt. Die Kompatibilität mit der API Stream für die Objekte ServerRequest und ServerResponse aus dem Node.js-Modul wurde sichergestellt. Im 'path'-Parameter für Python-Anwendungen ist es jetzt erlaubt, mehrere Verzeichnisse anzugeben.

Quelle: opennet.ru

60GB SSD 8Gb DDR4