VorwortNginx ist ein häufig verwendetes Lastenausgleichs-Gateway. Es generiert viele Protokolle. Da die Nginx-Konfigurationsdatei jedoch ein deklaratives Programmierparadigma ist, ist es nicht bequem, die Prozesssteuerung zu beschreiben, sodass die Protokollberichterstattung nicht durch einfache Anweisungen erreicht werden kann. Normalerweise erfordert die Nginx-Protokollberichterstattung das Schreiben eines Shell-Skripts oder eines Skripts in einer anderen Sprache, um die Nginx-Protokolldatei regelmäßig zu analysieren und dann zu melden. Mit dem NJS-Modul ist eine Protokollberichterstattung in Echtzeit möglich. Aufgrund der Beschränkung der vom NJS-Modul unterstützten Anweisungen ist es jedoch nicht möglich, die Protokollberichterstattung durch eine einzelne Anweisung gut zu implementieren. Durch die Kombination mehrerer Anweisungen kann eine nicht blockierende Echtzeit-Protokollberichterstattung erreicht werden. Diese Lösung ist in Nginx implementiert und ist nicht auf andere Prozesse wie Node, Python usw. angewiesen. UmsetzungsideenNginx hat viele Anweisungen. Das Folgende ist eine kürzlich untersuchte Implementierungsmethode. Wenn Sie eine elegantere Implementierungsmethode haben, hinterlassen Sie bitte eine Nachricht zur Kommunikation. Obwohl wir über das leistungsstarke NJS-Modul zum Schreiben von JS-Skripten verfügen, unterliegen die Anweisungen des NJS-Moduls zahlreichen Einschränkungen und können keine Funktionen wie Node ausführen. Um eine Echtzeitberichterstattung der Protokolle zu erreichen, müssen die folgenden beiden Voraussetzungen erfüllt sein:
Die häufig verwendete Anweisung js_set kann bei jeder Anforderung ausgelöst werden, unterstützt jedoch nur synchrone Vorgänge. Fetch- und Subrequest-Methoden können nicht verwendet werden. Die Fetch-Funktion kann in der js_content-Direktive verwendet werden. Sie kann jedoch nur lokal verwendet werden. Daher können andere Direktiven verwendet werden, um die Anforderung an den js_content-Pfad weiterzuleiten, und der Protokollbericht kann in der Direktive vervollständigt werden. Die Anweisung auth_request des Moduls http_auth_request_module wird verwendet, um die Berechtigungsüberprüfung von Anfragen, wie z. B. die JWT-Überprüfung, durchzuführen. Diese Anweisung wird für jede Anfrage ausgelöst, erstellt eine Unteranfrage und bestimmt das Ergebnis der Berechtigungsüberprüfung basierend auf dem Rückgabeergebnis der Anfrage. Daher können diese beiden Module kombiniert werden, um Protokollberichte zu erstellen. Implementierungsschritte1. Nginx kompilierenUm diese Funktion zu implementieren, muss Nginx die Module ngx_http_js_module und ngx_http_auth_request_module unterstützen. Diese beiden Module sind nicht standardmäßig installiert. Sie müssen sie selbst kompilieren und implementieren.
Kompilieren ./configure --add-module=[NJS-Modulpfad]/NJS/nginx --with-http_auth_request_module machen && machen installieren 2. Die Konfigurationsdatei lautet wie folgthttp { js_import http.js; # JS-Dateiserver importieren { hören Sie 80; auth_request /proxy_report; # Diese Anweisung wird zu Beginn jeder Anfrage ausgelöst und erstellt eine Unteranfrage, die an den Pfadspeicherort des Proxy-Reports weitergeleitet wird / { Index Index.html Index.htm; } Standort /Proxy_Bericht { intern; #Beschränken Sie nur interne Anfragen. #Speichern Sie die URI- und Methodendaten der ursprünglichen Anfrage im Header. Denn die Auth_Request-Anfrage wird diese Daten ändern. Proxy_set_header X-Original-URI $request_uri; Proxy_set_header X-Original-METHODE $request_method; # Weiterleitung an einen anderen Server proxy_pass http://localhost:8080/report; } } Server { hören Sie 8080; # Die Berichtsschnittstelle ist auf einem anderen Server platziert und es gibt keine auth_request-Anweisung auf dem Server, um Schleifenauslöseanfragen zu vermeiden location /report { #Führen Sie über die Anweisung js_content ein js-Verarbeitungsskript ein, um den Berichtsvorgang abzuschließen js_content http.report; } } } // http.js fileimport qs von "Querystring"; asynchroner Funktionsbericht (r) { lass args = { // Holen Sie sich den Original-URI und die Methode aus dem Header-URI: r.headersIn['X-Original-URI'], Methode: r.headersIn['X-Original-METHOD'], Remote-Adresse: r.Remote-Adresse, Status: r.status, headersIn: JSON.stringifry(r.headersIn), } // Eine asynchrone Anfrage ausgeben, ohne den aktuellen Anfrageprozess zu blockieren und den Bericht im Hintergrund fertigstellen ngx.fetch(`http://[report service path]?${qs.stringify(args)}`, { Methode: 'GET', }) //Gibt einen Statuscode von 200 zurück, um zu bestätigen, dass der Befehl erfolgreich war. r.return(200) } Standard exportieren { Bericht } ZusammenfassenDamit ist dieser Artikel über die Ideen und Methoden zur Implementierung von Echtzeit-Protokollberichten mit der Nginx-Pure-Konfiguration abgeschlossen. Weitere relevante Inhalte zum Echtzeit-Bericht von Nginx-Protokollen 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! Das könnte Sie auch interessieren:
|
<<: Einführung in die Leistungsoptimierung von MySQL-Datenbanken
>>: Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt
Gehen Sie zunächst zum Herunterladen auf die offi...
Eine der am häufigsten verwendeten und diskutiert...
Zusammenfassung der Installations- und Konfigurat...
1. Navigation: Ungeordnete Liste vs. andere Besch...
Ich bin auf ein Beispiel gestoßen, als ich nach e...
Wenn wir möchten, dass mehr Leute die von uns ers...
Übersicht über MySQL MySQL ist ein relationales D...
Vorwort: Frontend: jq+h5, um den dynamischen Neun...
CSS ist der Bereich von Stil, Layout und Präsenta...
Da immer mehr Projekte bereitgestellt werden, wer...
Inhaltsverzeichnis Vorwort 1. Linux ändert die Yu...
In diesem Artikel wird der spezifische JavaScript...
Postfix ist ein kostenloser und quelloffener MTA ...
Hintergrund Da ich alle meine Aufgaben auf Docker...
Die Requisiten der Komponente (Requisiten sind ei...