Momentan erhalte ich eine ziemlich große HTTP-Flut und mein Nginx-Reverse-Proxy erzeugt einen 502 Bad Gateway.
Ich habe einen Front-End-Server, auf dem nginx als Proxy für meinen Back-End-Server ausgeführt wird, aber es treten nur eine Reihe von connect() failed (110: Connection timed out) while connecting to upstream
Fehlern auf. Tonnen von ihnen. Wenn ich den Proxy-Server umgehe, 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, warum das Zeitlimit überschritten wird.
Irgendeine Hilfe?
Ausführen von Nginx 1.2.3 unter CentOS 6.2
nginx
reverse-proxy
rauben
quelle
quelle
Antworten:
Ich gehe davon aus, dass Sie Ihre Nginx-Fehlerprotokollierungsstufe bereits für die Fehlerbehebung erhöht haben. Wenn nicht, fange dort an.
Ihre beste Wette wird wahrscheinlich
strace
darin bestehen, die von Nginx ausgeführten Systemaufrufe anzuzeigen. Insbesondere sollten Sie aufconnect()
Anrufe achten und deren Rückgabecodes im Auge behalten (man 2 connect
kann hier Ihr Freund sein).Sobald Sie diese Informationen haben, können Sie besser erraten, ob das Problem auf Ihren Front-End-Proxy beschränkt ist oder etwas mit den Interaktionen zwischen Proxy und Back-End-Anwendungsserver zu tun hat.
quelle
Es wird nicht viel umständlicher als dies, es sei denn, Sie möchten Dtrace-Sonden einsetzen:
Festlegen der Debugprotokollstufe: /etc/nginx/nginx.conf:
Richten Sie tcpdump in einem anderen Fenster ein:
Überwachen Sie die Protokolldateien in einem weiteren Fenster:
Nginx interaktiv mit strace starten:
Und dann
Weiteres Debuggen ist mit einem Nginx möglich, der mit kompiliert wurde
--with-debug
. Überprüfen Sie es, indem Sie Folgendes ausführen:Ein weiteres gutes Modul, das standardmäßig nicht kompiliert wird, ist: HttpStubStatusModule . Aller Wahrscheinlichkeit nach erfordert jedes anständige Setup ein speziell kompiliertes Nginx (sehr empfehlenswertes Verpacken mit den Verpackungstools von Distribution).
Die meisten davon sind für den Produktionsbetrieb ungeeignet. Wenn Sie weitere Statistiken benötigen, sollten Sie Nginx mit gperf kompilieren.
quelle
Sieht so aus, als würden Sie eine stark frequentierte Site debuggen.
Verwendung
debug
mitdebug_connection
Direktive so nginx Fehlerprotokoll wird nur Debug - Protokolle von Ihrer IP zeigen.Sobald Sie einige nützliche Fehlerprotokolle sehen, anstatt die Debug-Option für die gesamte nginx-Konfiguration zu aktivieren, fügen Sie
error_log /path/to/some/file/ debug;
imlocation {..}
Block, der für die reverse_proxy-Verbindung verantwortlich ist, eine separate Direktive hinzu.Auf diese Weise können Sie das Debug-Fehlerprotokoll nur von Ihrer IP-Adresse isolieren.
Versuchen Sie, es mit der Anfrage zu verknüpfen, die Sie stellen (über Ihren Browser).
Beispiel: https://easyengine.io/tutorials/nginx/debugging/
Ein Level voraus können Sie das HttpEchoModule von Nginx verwenden
quelle
Ich habe noch nie festgestellt, dass Nginx ein Flaschenhals ist. Aber wenn Sie ohne Nginx getestet haben und keinen Fehler gefunden haben, wird es entweder (oder beides) sein:
Ohne Ihre Nginx-Konfigurationen zu sehen, kann niemand die ersteren kommentieren. Und ohne geeignete Ausgaben des Betriebssystems kann sich niemand zu letzterem äußern.
quelle