Ideen und Methoden zur Realisierung von Echtzeit-Protokollberichten mit der reinen Nginx-Konfiguration

Ideen und Methoden zur Realisierung von Echtzeit-Protokollberichten mit der reinen Nginx-Konfiguration

Vorwort

Nginx 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.

Umsetzungsideen

Nginx 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:

  1. Jede Anfrage kann auslösen
  2. Report im Hintergrund, ohne die Bearbeitung der aktuellen Anfrage zu blockieren

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.

Implementierungsschritte

1. Nginx kompilieren

Um 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.

  1. Informationen zur Installation des NJS-Moduls finden Sie unter When JS Meets Nginx
  2. Das Modul http_auth_request_module kann durch Hinzufügen des Parameters --with-http_auth_request_module kompiliert werden

Kompilieren

./configure --add-module=[NJS-Modulpfad]/NJS/nginx --with-http_auth_request_module 

machen && machen installieren 

2. Die Konfigurationsdatei lautet wie folgt

http {
    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 }

Zusammenfassen

Damit 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:
  • Detaillierte Erläuterung der Anweisungen zur Nginx-Protokollkonfiguration
  • Detaillierte Schritte zum Aktivieren der Echtzeitanzeige von Zugriffsprotokollen in Nginx
  • Zusammenfassung gängiger Befehle zur Analyse von Nginx-Protokollstatistiken

<<:  Einführung in die Leistungsoptimierung von MySQL-Datenbanken

>>:  Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt

Artikel empfehlen

MySQL 8.0.15 Installations-Tutorial für Windows 64-Bit

Gehen Sie zunächst zum Herunterladen auf die offi...

So implementieren Sie einen binären Suchbaum mit JavaScript

Eine der am häufigsten verwendeten und diskutiert...

Analyse des HTML-Schreibstils und Gründe erfahrener Leute

1. Navigation: Ungeordnete Liste vs. andere Besch...

So implementieren Sie abgerundete Ecken mit CSS3 unter Verwendung von JS

Ich bin auf ein Beispiel gestoßen, als ich nach e...

Detaillierte Erklärung zur Verwendung des <meta>-Tags in HTML

Wenn wir möchten, dass mehr Leute die von uns ers...

Mehrere Techniken zum Abspielen von Sounds mit CSS

CSS ist der Bereich von Stil, Layout und Präsenta...

Einführung in den Installationsprozess von MySQL 8.0 in einer Linux-Umgebung

Inhaltsverzeichnis Vorwort 1. Linux ändert die Yu...

JavaScript, um das Bild mit der Maus zu bewegen

In diesem Artikel wird der spezifische JavaScript...

So installieren und konfigurieren Sie den Postfix-Mailserver unter CentOS 8

Postfix ist ein kostenloser und quelloffener MTA ...

Beheben von Problemen beim Importieren und Exportieren von Mysql

Hintergrund Da ich alle meine Aufgaben auf Docker...

So verwenden und begrenzen Sie Requisiten in React

Die Requisiten der Komponente (Requisiten sind ei...