- Ubuntu 10.04.2
- nginx 0.7.65
Vejo algumas solicitações HTTP estranhas chegando ao meu servidor nginx.
Para entender melhor o que está acontecendo, desejo despejar dados de solicitação HTTP inteiros para essas consultas. (Ou seja, despejo todos os cabeçalhos e corpo da solicitação em algum lugar em que eu possa lê-los.)
Posso fazer isso com o nginx? Como alternativa, existe algum servidor HTTP que me permita fazer isso imediatamente, para o qual posso proxy desses pedidos por meio do nginx?
Atualização: observe que esta caixa tem um monte de tráfego normal e eu gostaria de evitar capturá-lo em nível baixo (digamos, com tcpdump
) e filtrá-lo mais tarde.
Eu acho que seria muito mais fácil filtrar o bom tráfego primeiro em uma regra de reescrita (felizmente eu posso escrever um facilmente nesse caso) e depois lidar apenas com o tráfego falso.
E eu não quero canalizar tráfego falso para outra caixa apenas para poder capturá-lo lá tcpdump
.
Atualização 2: para fornecer um pouco mais de detalhes, a solicitação falsa tem o parâmetro nomeado (por exemplo) foo
em sua consulta GET (o valor do parâmetro pode ser diferente). É garantido que os bons pedidos não tenham esse parâmetro.
Se eu puder filtrar por isso tcpdump
ou de ngrep
alguma forma - não há problema, vou usá-los.
Respostas:
Ajuste o número de linhas de pré / pós (-B e -A args) conforme necessário:
Isso permite que você obtenha as solicitações HTTP desejadas, na caixa, sem gerar um arquivo PCAP enorme que você precisa descarregar em outro lugar.
Lembre-se de que o filtro BPF nunca é exato; se houver um grande número de pacotes fluindo por qualquer caixa, o BPF pode e soltará pacotes.
fonte
Não sei exatamente o que você quer dizer com despejar a solicitação, mas você pode usar o tcpdump e / ou o wireshark para analisar os dados:
E você pode usar o wireshark para abrir o arquivo e ver a conversa entre os servidores.
fonte
Se você proxy as solicitações para o Apache com mod_php instalado, você pode usar o seguinte script PHP para despejar as solicitações:
Observe que, como você está usando o nginx,
$_SERVER['REMOTE_ADDR']
pode ser inútil. Você precisará passar o IP real para o Apache viaproxy_set_header X-Real-IP $remote_addr;
e poderá usá-lo (ou apenas confiar no logongetallheaders()
).fonte