it-swarm.com.de

nginx: Vollständige Anfrage / Antwort mit allen Headern protokollieren?

Wir haben einen Anwendungsserver, der manchmal hängt. Wir vermuten, dass dies auf eine schlechte Anfrage eines Kunden zurückzuführen ist.

Kann nginx die vollständige Anfrage/Antwort (wie Fiddler-Captures) in Dateien protokollieren, damit wir die Anfragen sehen können, die vor dem Hang gesendet wurden?

(Wir müssen wahrscheinlich pcap und diesen Ansatz vermeiden und alles in Nginx machen)

Wenn nginx nicht das richtige Werkzeug dafür ist, was (außer einem Netzwerkanalysator) könnte es sein?

Um den von Besuchern gesendeten Anfragetext zu erhalten, verwenden Sie client_body_in_file_only on; Und protokollieren Sie die "temporäre" Datei, in die sie geschrieben wurde, in die Protokolle, indem Sie var $request_body_file An das Protokollformat anhängen. "Temporäre" Dateien befinden sich standardmäßig im Verzeichnis client_temp.

Sie können auch Anforderungsheader $http_<header> Protokollieren und Header mit $sent_http_<header> Senden.

Wenn Sie einen Anfragetext und Header haben, sollten Sie diese wiedergeben und die Antwort Ihres Besuchers erhalten können.

Auch etwas wie gor sollte unbedingt berücksichtigt werden, damit Sie den Datenverkehr in einer anderen Umgebung wiedergeben können, in der Sie nginx diese temporären Dateien schreiben lassen können, ohne IO Probleme in der Produktion zu verursachen) nginx wird sie nicht mit dem Wert on löschen, deshalb ist es in diesem Fall nicht so "vorübergehend".

48
Xavier Lucas

mitmproxy scheint das richtige Werkzeug zu sein, um das zu tun, was Sie verlangen.

mitmproxy ist ein interaktiver, SSL-fähiger Man-in-the-Middle-Proxy für HTTP mit einer Konsolenschnittstelle.

mitmdump ist die Befehlszeilenversion von Mitmproxy. Denken Sie an tcpdump für HTTP.

Funktionen

  • Fangen Sie HTTP-Anforderungen und -Antworten ab und ändern Sie sie im laufenden Betrieb.
  • Speichern Sie vollständige HTTP-Konversationen für eine spätere Wiedergabe und Analyse.
  • Wiederholen Sie die clientseitige HTTP-Konversation. Wiederholen Sie die HTTP-Antworten eines zuvor aufgezeichneten Servers.
  • Proxy-Modus umkehren, um Datenverkehr an einen angegebenen Server weiterzuleiten.
  • Transparenter Proxy-Modus unter OSX und Linux.
  • Nehmen Sie mit Python Skriptänderungen am HTTP-Verkehr vor.
  • SSL-Zertifikate zum Abfangen werden im laufenden Betrieb generiert.

Im Reverse-Proxy-Modus können Sie die Anforderung und Antwort genau wie bei Fiddler erfassen.

17
Vivek Thomas