Mamy serwer aplikacji, który czasami się zawiesza. Podejrzewamy, że jest to spowodowane złym żądaniem klienta.
Czy nginx może zarejestrować pełne żądanie / odpowiedź (jak przechwytywanie skrzypka) do plików, abyśmy mogli zobaczyć żądania wysłane przed zawieszeniem?
(Prawdopodobnie musimy unikać PCAP i tego podejścia i zrobić to wszystko w Nginx)
Jeśli nginx nie jest odpowiednim narzędziem do tego, czym może być (poza analizatorem sieci)?
Odpowiedzi:
Aby uzyskać treść żądania wysłaną przez odwiedzających, użyj
client_body_in_file_only on;
i zaloguj „tymczasowy” plik, do którego jest zapisany w logach, dołączając var$request_body_file
do formatu dziennika. Pliki „tymczasowe” będą domyślnie znajdować się w katalogu client_temp.Możesz także rejestrować nagłówki żądań
$http_<header>
i wysyłać je za pomocą$sent_http_<header>
.Jeśli masz treść żądania i nagłówki, powinieneś być w stanie je odtworzyć i uzyskać odpowiedź od odwiedzającego.
Należy również wziąć pod uwagę coś takiego jak Gor , abyś mógł odtworzyć ruch w innym środowisku, w którym możesz pozwolić Nginxowi pisać te pliki tymczasowe bez powodowania problemów z IO w produkcji (nginx nie wyczyści ich
on
wartościowo, dlatego nie jest to takie „tymczasowe” w tym przypadku).źródło
client_body_in_file_only
i drugie$http_<header>
będzie potrzebne. Rozumiem to teraz.mitmproxy wydaje się być odpowiednim narzędziem do robienia tego, o co prosisz.
Tryb odwrotnego proxy pozwoliłby przechwycić żądanie i odpowiedź, tak jak robi to Fiddler.
źródło