Frage Wie kann ich nginx weiter als das Fehlerprotokoll debuggen?


Ich erhalte gerade eine ziemlich große HTTP-Flut, und mein nginx-Reverse-Proxy erzeugt ein 502-Bad-Gateway.

Ich habe einen Frontend-Server, auf dem nginx als Proxy für meinen Backend-Server läuft, aber es bringt nur eine Menge connect() failed (110: Connection timed out) while connecting to upstream Fehler. Tonnen von ihnen. Wenn ich den Proxy-Server umgebe, um eine Verbindung zum Backend herzustellen, kann ich die Site problemlos ausführen, sodass ich weiß, dass sie sich irgendwo im Reverse-Proxy befindet. Ich habe jedoch keine Ahnung, wie ich feststellen kann, warum es zu spät ist.

Irgendeine Hilfe?

läuft nginx 1.2.3 auf CentOS 6.2


32
2017-09-28 16:57


Ursprung


Sie könnten damit beginnen, Nginx auf die neueste Version zu aktualisieren. Einen solchen Fehler kenne ich in 1.2.3 nicht - Ben Lessani - Sonassi
.... und dann schau dir an was auch immer ist VERWEIGERUNG DER VERBINDUNGEN VON NGINX - symcbean
Was ist Ihr Backend-Server? Ich war vorher durch Fehler verwirrt, als der Fehler Nginx tatsächlich aus dem Backend kam. Hier scheint es nicht der Fall zu sein, aber Sie müssen Ihre Frage mit weiteren Details aktualisieren. - jeffatrackaid
Verbinden Sie sich über ein privates / öffentliches Netzwerk mit dem Back-End? Sind die IPs des Proxys in Firewalls, Ddos oder anderen ip / rate-limiting type-Tools auf der weißen Liste? Wie sieht ein Netstat auf dem Backend-Server aus? Wie viele Verbindungen sind offen? Was sind MaxClients im Backend? Erschöpfen Sie diese? - jeffatrackaid


Antworten:


Ich gehe davon aus, dass Sie Ihre Nginx-Fehlerprotokollierungsstufe bereits bis zum Debugging erhöht haben. Wenn nicht, fang dort an.

Ihre beste Wette wird wahrscheinlich verwenden strace um die Systemaufrufe anzuzeigen, die von Nginx vorgenommen werden. Insbesondere sollten Sie darauf achten connect() Anrufe, und behalten Sie die Rückkehrcodes von diesen (man 2 connect kann hier dein Freund sein).

Sobald Sie über diese Informationen verfügen, können Sie besser einschätzen, ob das Problem auf Ihren Front-End-Proxy beschränkt ist oder etwas mit den Interaktionen zwischen dem Proxy und dem Back-End-Anwendungsserver zu tun hat.


19
2017-09-30 18:13





Es wird nicht viel pedantischer als das, wenn Sie keine Dtrace-Sonden einsetzen wollen:

  1. Legen Sie die Debugprotokollstufe fest: /etc/nginx/nginx.conf:

    ...
    http {
            ...
            error_log /var/log/nginx/error.log debug; # todo testing remove me not for production use
            ...
    }
    
  2. Setup tcpdump in einem anderen Fenster:

    tcpdump not port 22 -vvv -s0 -q -XXX
    
  3. Überwachen Sie die Protokolldateien in einem weiteren Fenster:

    tail -f /var/log/nginx/*
    
  4. Start nginx interaktiv mit strace:

    # top of /etc/nginx/nginx.conf:
    
    daemon off; # todo testing remove me not for production use
    

    Und dann

     $ strace nginx 
    

Weiteres Debugging kann mit einem mit kompilierten Nginx durchgeführt werden --with-debug. Überprüfen Sie es, indem Sie Folgendes ausführen:

    nginx -V 2>&1 | grep -- '--with-debug' # no output if not debug

Ein anderes gutes Modul, das nicht standardmäßig kompiliert wird, ist: HttpStubStatusModule. Aller Wahrscheinlichkeit nach wird für jedes vernünftige Setup ein benutzerdefiniertes nginx benötigt (empfohlen wird die Verpackung mit den Verpackungstools von Distro).

Die meisten davon sind für den Produktionseinsatz ungeeignet. Schauen Sie sich an, wenn Sie mehr Statistiken benötigen, um Nginx mit Gperf zu kompilieren.


35
2017-10-06 23:40



In Schritt 2 funktioniert das folgende für mich: tcpdump -i any nicht Port 22 -vvv -s0 -q -XXX - ccppjava


Sieht so aus, als ob Sie eine Website mit hohem Traffic debuggen.

Benutzen debug mit debug_connection Direktive so Nginx Fehlerprotokoll zeigt nur Debug-Protokolle von Ihrer IP.

Sobald Sie beginnen, einige nützliche Fehlerprotokolle zu sehen, anstatt die Debug-Option für die gesamte nginx-Konfiguration zu aktivieren, fügen Sie ein separates hinzu error_log /path/to/some/file/ debug; Richtlinie in location {..} Block verantwortlich für reverse_proxy Verbindung.

Auf diese Weise können Sie das Debug-Fehlerprotokoll nur von Ihrer IP-Adresse isolieren.

Versuchen Sie, es mit Ihrer Anfrage zu verknüpfen (von Ihrem Browser aus).

Zum Beispiel, überprüfen Sie bitte: http://rtcamp.com/tutorials/debugging-nginx-configuration/

Eine Ebene voraus, können Sie Nginx verwenden HttpEchoModul 


4
2017-10-05 22:00





Ich habe Nginx nie als Engpass erkannt, in den meisten Fällen ist es mehr als fähig als die Backends. Aber wenn Sie ohne Nginx getestet haben und keinen Fehler gefunden haben, wird es entweder (oder beides) sein:

  1. Nginx-Konfigurationsproblem
    1. Upstream-Timeout-Wert falsch
    2. Falsche Probe URL auf Upstream
    3. Zu wenige Arbeiter
    4. Usw.
  2. Betriebssystem TCP / IP-Engpass
    1. Es kann sein, dass das Proxying selbst eine Verdopplung offener Ports und Zustände verursacht. Sei es Dateideskriptoren, Ports, TCP-Verbindungen

Ohne Ihre Nginx-Konfigurationen zu sehen, kann niemand den ersten Kommentar abgeben. Und ohne geeignete OS-Ausgaben kann sich niemand dazu äußern.


2
2017-10-05 21:00