nginx: Log completa solicitação / resposta com todos os cabeçalhos?

30

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) nos arquivos, para que possamos ver as solicitações que foram enviadas antes da interrupção?

(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?

    
por samsmith 14.10.2014 / 07:24

2 respostas

33

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 está escrito nos registros anexando var $request_body_file ao formato de log. 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 enviar cabeçalhos com $sent_http_<header> .

Se você tiver um corpo e cabeçalhos de solicitação, deverá poder reproduzi-lo e obter a resposta que o visitante teve.

Além disso, algo como gor deve ser altamente considerado para que você possa reproduzir o tráfego em outro ambiente onde possa deixar o nginx escrever esses arquivos temporários sem causar problemas de IO na produção (o nginx não os elimina com o valor on , e é por isso que não é "temporário" nesse caso).

    
por 14.10.2014 / 10:10
15

mitmproxy parece ser a ferramenta certa para fazer o que você está pedindo.

mitmproxy is an interactive, SSL-capable man-in-the-middle proxy for HTTP with a console interface.

mitmdump is the command-line version of mitmproxy. Think tcpdump for HTTP.

Features

  • Intercept HTTP requests and responses and modify them on the fly.
  • Save complete HTTP conversations for later replay and analysis.
  • Replay the client-side of an HTTP conversations. Replay HTTP responses of a previously recorded server.
  • Reverse proxy mode to forward traffic to a specified server.
  • Transparent proxy mode on OSX and Linux.
  • Make scripted changes to HTTP traffic using Python.
  • SSL certificates for interception are generated on the fly.

O modo de proxy reverso permite que você capture a solicitação e a resposta da mesma forma que o Fiddler.

    
por 14.10.2014 / 08:02