nginx: registra la richiesta / risposta completa con tutte le intestazioni?


44

Abbiamo un server delle applicazioni che a volte si blocca. Sospettiamo che sia dovuto a una cattiva richiesta da parte di un cliente.

Nginx può registrare la richiesta / risposta completa (come le acquisizioni di violinisti) in file, in modo da poter vedere le richieste che sono state inviate prima dell'hang?

(Probabilmente dovremo evitare pcap e quell'approccio e fare tutto in nginx)

Se nginx non è lo strumento giusto per questo, quale (a parte un analizzatore di rete) potrebbe essere?


1
mitmproxy in modalità proxy inverso dovrebbe fare quello che stai cercando.
Vivek Thomas,

@VivekThomas questa è una domanda nginx .... stiamo già usando nginx e non cambieremo.
samsmith,

3
@samsmith Vecchia domanda, ma forse questo aiuta qualcun altro: non devi rinunciare a nginx. A seconda delle circostanze, puoi semplicemente reindirizzare temporaneamente nginx a un'altra porta, per consentire a mitmproxy di intercettare il traffico e supportare il debug. Quindi, una volta completato, puoi semplicemente reindirizzare nginx alla porta originale e arrestare mitmproxy.
Per Lundberg,

1
Puoi utilizzare il modulo modsecurity, che può registrare richieste / risposte complete, vedi nginx.com/blog/modsecurity-logging-and-debugging
Willem,

Risposte:


44

Per ottenere il corpo della richiesta inviato dai visitatori, utilizzare client_body_in_file_only on;e registrare il file "temporaneo" in cui è scritto nei registri aggiungendo var $request_body_fileal formato del registro. I file "temporanei" saranno posizionati nella directory client_temp per impostazione predefinita.

Puoi anche registrare le intestazioni delle richieste $http_<header>e inviarle con $sent_http_<header>.

Se hai il corpo della richiesta e le intestazioni, dovresti essere in grado di riprodurlo e ottenere la risposta del tuo visitatore.

Anche qualcosa come gor dovrebbe essere altamente considerato in modo da poter riprodurre il traffico su un altro ambiente in cui è possibile consentire a nginx di scrivere questi file temporanei senza causare problemi di I / O in produzione (nginx non li eliminerà con onvalore, per questo non è così "temporaneo" in questo caso).


1
@jwadsack Leggi attentamente la risposta.
Xavier Lucas,

4
@XavierLucas Pensavo che avessi fornito due approcci diversi. Non mi ero reso conto che stavi dicendo entrambi client_body_in_file_only e che $http_<header>sarebbe stato necessario. Lo capisco adesso.
jwadsack,

5
Potresti condividere un codice più preciso?
Velkan,

3
Sicuramente $ http <header> è utile solo se conosci in anticipo tutti i nomi delle intestazioni
Ed Randall,

2
Qualcuno può condividere un vero frammento della configurazione di nginx, per favore?
Nowaker,

17

mitmproxy sembra essere lo strumento giusto per fare ciò che stai chiedendo.

mitmproxy è un proxy man-in-the-middle interattivo e compatibile con SSL per HTTP con un'interfaccia console.

mitmdump è la versione da riga di comando di mitmproxy. Pensa a tcpdump per HTTP.

Caratteristiche

  • Intercetta le richieste e le risposte HTTP e modificale al volo.
  • Salva conversazioni HTTP complete per la riproduzione e l'analisi successive.
  • Riproduci il lato client delle conversazioni HTTP. Riproduci le risposte HTTP di un server precedentemente registrato.
  • Modalità proxy inversa per inoltrare il traffico a un server specificato.
  • Modalità proxy trasparente su OSX e Linux.
  • Apporta modifiche tramite script al traffico HTTP utilizzando Python.
  • I certificati SSL per l'intercettazione vengono generati al volo.

La modalità proxy inverso ti consente di acquisire la richiesta e la risposta proprio come Fiddler.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.