- Ubuntu 10.04.2
- nginx 0.7.65
Je vois des requêtes HTTP étranges arriver sur mon serveur nginx.
Pour mieux comprendre ce qui se passe, je veux vider des données de requête HTTP entières pour de telles requêtes. (C'est-à-dire vider tous les en-têtes de demande et le corps quelque part où je peux les lire.)
Puis-je faire cela avec nginx? Sinon, y a-t-il un serveur HTTP qui me permet de le faire hors de la boîte, sur lequel je peux proxy ces demandes par le biais de nginx?
Mise à jour: Notez que cette boîte a un tas de trafic normal, et je voudrais éviter de tout capturer à bas niveau (disons avec tcpdump
) et de le filtrer plus tard.
Je pense qu'il serait beaucoup plus facile de filtrer le bon trafic d'abord dans une règle de réécriture (heureusement, je peux en écrire un assez facilement dans ce cas), puis de traiter uniquement le trafic bidon.
Et je ne veux pas canaliser le trafic bidon vers une autre box juste pour pouvoir le capturer avec tcpdump
.
Mise à jour 2: pour donner un peu plus de détails, les fausses requêtes ont un paramètre nommé (par exemple) foo
dans leur requête GET (la valeur du paramètre peut différer). Les bonnes demandes sont garanties de ne jamais avoir ce paramètre.
Si je peux filtrer par ceci dans tcpdump
ou en ngrep
quelque sorte - pas de problème, je les utiliserai.
Réponses:
Ajustez le nombre de lignes pré / post (arguments -B et -A) selon vos besoins:
Cela vous permet d'obtenir les requêtes HTTP que vous souhaitez, sur la boîte, sans générer un énorme fichier PCAP que vous devez décharger ailleurs.
Gardez à l'esprit que le filtre BPF n'est jamais exact.S'il y a un grand nombre de paquets qui transitent par n'importe quelle boîte, BPF peut et va supprimer des paquets.
la source
Je ne sais pas exactement ce que vous entendez par vidage de la demande, mais vous pouvez utiliser tcpdump et / ou Wireshark pour analyser les données:
Et vous pouvez utiliser Wireshark pour ouvrir le fichier et voir la conversation entre les serveurs.
la source
Si vous proxy les demandes à Apache avec mod_php installé, vous pouvez utiliser le script PHP suivant pour vider les demandes:
Notez que puisque vous utilisez nginx, cela
$_SERVER['REMOTE_ADDR']
peut être inutile. Vous devrez transmettre la véritable IP à Apache viaproxy_set_header X-Real-IP $remote_addr;
, et vous pouvez l'utiliser à la place (ou simplement compter sur sa connexion viagetallheaders()
).la source