- Ubuntu 10.04.2
- nginx 0.7.65
Veo algunas solicitudes HTTP extrañas que llegan a mi servidor nginx.
Para comprender mejor lo que está sucediendo, quiero volcar datos de solicitud HTTP completos para tales consultas. (Es decir, volcar todos los encabezados y el cuerpo de la solicitud en algún lugar donde pueda leerlos).
¿Puedo hacer esto con nginx? Alternativamente, ¿hay algún servidor HTTP que me permita hacer esto fuera de la caja, al cual puedo enviar estas solicitudes por medio de nginx?
Actualización: Tenga en cuenta que este cuadro tiene un montón de tráfico normal, y me gustaría evitar capturarlo todo en un nivel bajo (digamos, con tcpdump
) y filtrarlo más tarde.
Creo que sería mucho más fácil filtrar un buen tráfico primero en una regla de reescritura (afortunadamente, puedo escribir uno con bastante facilidad en este caso), y luego lidiar solo con tráfico falso.
Y no quiero canalizar tráfico falso a otro cuadro solo para poder capturarlo allí tcpdump
.
Actualización 2: para dar un poco más de detalles, la solicitud falsa tiene un parámetro llamado (digamos) foo
en su consulta GET (el valor del parámetro puede diferir). Se garantiza que las buenas solicitudes no tendrán este parámetro nunca.
Si puedo filtrar por esto tcpdump
o de ngrep
alguna manera, no hay problema, los usaré.
Respuestas:
Ajuste la cantidad de líneas previas / posteriores (-B y -A args) según sea necesario:
Esto le permite obtener las solicitudes HTTP que desea, en la caja, sin generar un gran archivo PCAP que debe descargar en otro lugar.
Tenga en cuenta que el filtro BPF nunca es exacto, si hay una gran cantidad de paquetes que fluyen a través de cualquier caja, BPF puede y dejará caer paquetes.
fuente
No sé exactamente qué quiere decir con volcar la solicitud, pero puede usar tcpdump y / o wireshark para analizar los datos:
Y puede usar wireshark para abrir el archivo y ver la conversación entre servidores.
fuente
Si envía las solicitudes a Apache con mod_php instalado, puede usar el siguiente script PHP para volcar las solicitudes:
Tenga en cuenta que dado que está utilizando nginx,
$_SERVER['REMOTE_ADDR']
puede no tener sentido. Tendrá que pasar la IP real a Apache a través deproxy_set_header X-Real-IP $remote_addr;
, y puede usar eso en su lugar (o simplemente confiar en que se registre a través degetallheaders()
).fuente