VorwortDa viele Webentwickler mit der Sprache Lua nicht vertraut sind, hat nginx das Modul njs eingeführt, das js-Skripte in die nginx-Konfiguration einführen kann, um einige komplexere nginx-Konfigurationsfunktionen zu erreichen. Im Folgenden werden die Funktionen und die Verwendung des NJS-Moduls vorgestellt. 1. NJS-Modul installierenErfordert eine Nginx-Version höher als 1.9.11, da die Direktive load_module erst ab dieser Version unterstützt wird Methode 1: NJS-Module dynamisch ladenHinweis: Verschiedene Versionen von nginx erfordern entsprechende Versionen des NJS-Moduls.
lade_Module Module/ngx_http_js_module.so; Lademodulmodule/ngx_stream_js_module.so; Methode 2: Module während der Kompilierung hinzufügenQuellcode herunterladen https://hg.nginx.org/njs/?_ga=2.99259804.301589667.1638621670-451035464.1638621670 Dieses Repository wird in Mercurial verwaltet und Sie müssen den Befehl hg verwenden, um den Quellcode herunterzuladen hg-Klon http://hg.nginx.org/njs Fügen Sie beim Kompilieren von nginx die folgende Konfiguration hinzu ./configure --add-module=<Pfad zu njs>/njs/nginx 2. Eigenschaften der Betriebsumgebung des NJS-ModulsDas NJS-Modul führt kein Nodejs aus, daher kann nginx js nur wie das Lua-Modul als Middleware von nginx verwendet werden und nicht unabhängig als vollständiger Backend-Dienst genutzt werden. Im Gegensatz zu der Node- oder Browser-Laufumgebung, mit der Front-End-Studenten vertraut sind, verwendet njs nicht die v8-Parsing-Engine. Nginx passt offiziell eine Parsing-Engine basierend auf der ECMAScript-Sprachspezifikation an. Daher unterscheiden sich auch die unterstützte Syntax und die Funktionen vom Standard. 1. Erstellen Sie für jede Anforderung eine Laufzeitumgebung und zerstören Sie diese, wenn die Anforderung endet Die virtuelle Maschine, die gestartet wird, wenn der Knoten ausgeführt wird, befindet sich im Speicher und die Speicherbereinigung wird automatisch abgeschlossen, wenn die virtuelle Maschine ausgeführt wird. NJS erstellt für jede Anforderung eine neue virtuelle Maschine und weist Speicher zu. Am Ende der Anforderung zerstört es die virtuelle Maschine und gibt den Speicher frei. 2. Nicht blockierende Codeausführung njs verwendet ein ereignisgesteuertes Modell, um die NJS-Laufzeitumgebung zu planen. Wenn NJS einen blockierenden Vorgang ausführt (z. B. das Lesen von Netzwerkdaten oder das Senden einer externen Unteranforderung), unterbricht Nginx die Ausführung der aktuellen NJS-VM und plant sie neu, wenn das Ereignis abgeschlossen ist. Daher kann der NJS-Code einfach linear geschrieben werden 3. Unterstützt nur einen Teil der ECAMA-Spezifikationssyntax NJS basiert auf der ECMAScript 5.1-Spezifikation und unterstützt einige Funktionen in ECMAScript 6 Liste der unterstützten Syntax https://nginx.org/en/docs/NJS/compatibility.html?_ga=2.91935000.301589667.1638621670-451035464.1638621670 4. Verarbeitung von Integrationsanfragen Nginx verarbeitet Anfragen in mehreren Phasen. Nginx-Anweisungen werden normalerweise in einer bestimmten Phase ausgeführt, um die Anfrage zu verarbeiten. Nginx-Module verwenden diese Funktion, um eine Anfrage zu debuggen oder zu ändern. Das NJS-Modul verwendet auch Anweisungen, um die JS-Codelogik in einem bestimmten Stadium auszuführen. Drei NJS-Module unterstützen Anweisungen und entsprechende Verarbeitungsschritte
Vier einfache Anwendungsbeispiele für NJSDas folgende Beispiel verwendet js, um ein Protokollformat zu definieren Erstellen Sie eine logging.js-Datei im Nginx-Konfigurationsverzeichnis // Dateispeicherort: [nginx-Stammverzeichnis]/conf/logging.js // Dateiinhalt: Analysiere die Anfrage und drucke alle Anfrageheader aus function logAllHeaders(r) { var log = `${r.variables.time_iso8601} Client=${r.remoteAddress} Methode=${r.method} URI=${r.uri} Status=${r.status}`; r.rawHeadersIn.forEach(h => log += ` in.${h[0]}=${h[1]}`); r.rawHeadersOut.forEach(h => log += ` out.${h[0]}=${h[1]}`); Rückgabeprotokoll; } exportiere Standard { logAllHeaders } # nginx-Konfigurationsdatei http { js_import logging.js; #js_import lädt ein js-Skript, das im Verzeichnis der nginx-Konfigurationsdatei abgelegt wird. Der js-Dateiname wird als Namespace des Moduls verwendet. Wenn Sie auf eine Funktion verweisen, können Sie diese mit [Dateiname] referenzieren. [Funktionsname] js_set $log_all_headers logging.logAllHeaders; #js_set speichert die Ausgabe der Funktion logAllHeaders in der js-Datei in der Variable $log_all_headers. log_format kvpairs $log_all_headers; # Ein Protokollformat anpassen kvpairs Server { hören Sie 80; access_log /var/log/nginx/access.log kvpairs; # Legen Sie das Protokollformat unter dieser Regel auf das benutzerdefinierte Format über root /usr/share/nginx/html fest. } } 5. NJS unterstützte BefehleReferenzdokumentation NJS unterstützt nicht viele Anweisungen. Um komplexe Funktionen zu erreichen, muss es in Kombination mit anderen Nginx-Anweisungen verwendet werden. Nachfolgend sind einige häufig verwendete Anweisungen aufgeführt. js_body_filter ändert den Hauptteil der Antwort Syntax: js_body_filter-Funktion | Modul.Funktion [Puffertyp=Zeichenfolge | Puffer]; Standard: - Kontext: Standort, limit_except Diese Anweisung erschien in der Version 0.5.2. Beispiel /** * Funktion zum Verarbeiten des Antworttexts * @param { object } r - HTTP-Objekt * @param { buffer_type } data - Daten des Anforderungstexts * @param { boolean } flags - ob es sich um den letzten Datenblock handelt */ Funktion Filter(r, Daten, Flags) { r.sendBuffer(data.toLowerCase(), flags); } js_content verarbeitet die Anfrage-Antwort Syntax: js_content-Funktion | Modul.Funktion; Standard: - Kontext: Standort, limit_except Beispiel http { # JS-Modul importieren js_import http.js; Server { hören Sie 80; Standort /Inhalt { # Geben Sie die js-Funktion an, die über die js_content-Anweisung ausgeführt werden soll js_content http.content; } } } // http.js-Dateifunktion content(r) { r.status = 200; r.headersOut['Inhaltstyp'] = "text/plain; Zeichensatz=utf-8"; r.headersOut['Inhaltslänge'] = 12; r.sendHeader(); r.send("Ich bin zufrieden"); r.fertigstellen() } exportiere Standard { Inhalt } js_header_filter ändert den zurückgegebenen Anforderungsheader Syntax: js_header_filter-Funktion | Modul.Funktion; Standard: - Kontext: Standort, limit_except Diese Anweisung erschien in der Version 0.5.1. js_import importiert eine js-Datei Syntax: js_import module.js | export_name aus module.js; Standard: - Kontext: http Diese Anweisung erschien in der Version 0.4.0. Beispiel http { # JS-Modul importieren. Der Dateiname wird als Namespace des Moduls verwendet. Wenn Sie auf eine Funktion verweisen, können Sie sie mit [Dateiname].[Funktionsname] referenzieren js_import http.js; Server { hören Sie 80; Standort /Inhalt { # Geben Sie die js-Funktion an, die über die js_content-Anweisung ausgeführt werden soll js_content http.content; } } } js_set setzt Variablen Syntax: js_set $variable Funktion | Modul.Funktion; Standard: - Kontext: http Die von dieser Anweisung referenzierte Funktion wird ausgeführt, wenn die Variable zum ersten Mal referenziert wird. Innerhalb der Funktion werden nur synchrone Operationen unterstützt. Verweise
ZusammenfassenDies ist das Ende dieses Artikels über die Verwendung des NJS-Moduls zum Einführen von JS-Skripten in die Nginx-Konfiguration. Weitere relevante Inhalte zum Einführen von JS-Skripten in die Nginx-Konfiguration finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! |
<<: MySQL-Datenbank-Master-Slave-Replikation und Lese-/Schreibtrennung
>>: Mehrere Möglichkeiten zum Einfügen von SVG in HTML-Seiten
In diesem Artikel wird die Verwendung von MySQL-A...
Inhaltsverzeichnis MySQL Inner Join, Left Join, R...
MySQL-Datenbanktabellen können Indizes erstellen,...
Klicken Sie auf den Ankerlink, um reibungslos zu ...
Socket-Optionsfunktion Funktion: Methoden zum Les...
Der spezifische Code zur Implementierung des einz...
Wenn wir einmal von Datenbanken absehen, was ist ...
JDK-Downloadadresse: http://www.oracle.com/techne...
Dieser Artikel beschreibt die Installations- und ...
Inhaltsverzeichnis 1 Docker installieren 2 Konfig...
In diesem Artikelbeispiel wird der spezifische Co...
Manche Leute sagen, dass Werbung machen wie ein Me...
Dieser Artikel veranschaulicht anhand von Beispie...
1. Favicon.cc Um ICO-Symbol-Websites online zu er...
In diesem Artikelbeispiel wird der spezifische Co...