Temos um servidor de aplicativos que às vezes trava. Suspeitamos que seja devido a uma solicitação incorreta de um cliente.
O nginx pode registrar a solicitação/resposta completa (como capturas de violinista) em arquivos, para que possamos ver as solicitações que foram enviadas antes do travamento?
(Provavelmente precisamos evitar o pcap e essa abordagem e fazer tudo no nginx)
Se o nginx não é a ferramenta certa para isso, o que (além de um analisador de rede) pode ser?
Para obter o corpo da solicitação enviado pelos visitantes, use
client_body_in_file_only on;
e registre o arquivo "temporário" no qual ele foi gravado nos logs anexando var$request_body_file
ao formato de log. Os arquivos "temporários" estarão localizados no diretório client_temp por padrão.Você também pode registrar cabeçalhos de solicitação
$http_<header>
e cabeçalhos enviados com$sent_http_<header>
.Se você tiver o corpo e os cabeçalhos da solicitação, poderá reproduzi-la e obter a resposta que seu visitante teve.
Além disso, algo como gor deve ser altamente considerado para que você possa reproduzir o tráfego em outro ambiente onde você possa deixar o nginx gravar esses arquivos temporários sem causar problemas de IO na produção (o nginx não os limpará com
on
valor, é por isso que não é "temporário" nesse caso).mitmproxy parece ser a ferramenta certa para fazer o que você está pedindo.
O modo de proxy reverso permitiria capturar a solicitação e a resposta da mesma forma que o Fiddler.
Eu estava procurando uma resposta para essa pergunta e encontrei isso: https://tarunlalwani.com/post/request-capturing-nginx-lua/
Basicamente, usa um script lua para reunir e registrar todos os cabeçalhos:
Em seguida, consulte-o na configuração do nginx:
Para reunir o corpo, é necessário um bloco no nginx main.conf:
O post linkado acima detalha isso muito melhor.