Die Hauptversion nginx 1.19.7 wurde veröffentlicht, in der die Entwicklung neuer Funktionen fortgesetzt wird (in der parallel unterstützten stabilen Version 1.18 werden nur Änderungen zur Behebung schwerwiegender Fehler und Sicherheitsanfälligkeiten vorgenommen).
Wesentliche Änderungen:
- Wenn die freien Verbindungen aufgebraucht sind, schließt nginx nun nicht nur keepalive-Verbindungen, sondern auch Verbindungen, die sich im Zustand des schwebenden Schließens („lingering close“) befinden.
- Der Code zur Verarbeitung von Verbindungen in HTTP/2 wurde der Implementierung von HTTP/1.x angenähert. Die Unterstützung individueller 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 sollten „large_client_header_buffers“ verwendet werden.
Gleichzeitig wurde njs 0.5.1 veröffentlicht, ein JavaScript-Interpreter für Webserver nginx. Der njs-Interpreter implementiert die ECMAScript-Standards und ermöglicht es, die Funktionalität von nginx zur Verarbeitung von Anfragen durch Skripte in der Konfiguration zu erweitern. Skripte können in der Konfigurationsdatei verwendet werden, um erweiterte Logik für die Anfrageverarbeitung, die Konfigurationsgenerierung, die dynamische Antwortgenerierung, die Modifikation von Anfragen/Antworten oder die schnelle Erstellung von Platzhaltern zur Lösung von Problemen 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 Antwort-Header 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};
Außerdem wurde die Methode ngx.fetch() hinzugefügt, die das Fetch-API implementiert und die Funktionalität eines HTTP-Clients bereitstellt. Die Methode unterstützt die Optionen body, headers, buffer_size und max_response_body_size. Im zurückgegebenen Objekt Response werden die Methoden arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type und url unterstützt, während im Objekt Header die Methoden get(), getAll() und has() verfügbar sind. 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)); }
Es ist auch die Veröffentlichung zu erwähnen Server NGINX Unit 1.22 ermöglicht die Ausführung von Webanwendungen in verschiedenen Programmiersprachen (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js und Java). Unter NGINX Unit können gleichzeitig mehrere Anwendungen in verschiedenen Programmiersprachen ausgeführt werden, deren Startparameter dynamisch geändert werden können, ohne die Konfigurationsdateien bearbeiten oder einen Neustart durchführen zu müssen. Der Code ist in C geschrieben und wird unter der Lizenz Apache 2.0 veröffentlicht.
In der neuen Version von NGINX Unit lag der Schwerpunkt auf der Stabilitätsverbesserung, der Erweiterung der Testwerkzeuge und der Fehlerbehebung. 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 einem separaten Benutzer unit in der Gruppe unit ausgeführt. Die Kompatibilität mit der API Stream von ServerRequest- und ServerResponse-Objekten aus dem Node.js-Modul wurde sichergestellt. Bei der Option „path“ für Python-Anwendungen ist die Angabe mehrerer Verzeichnisse erlaubt.
Quelle: opennet.ru
