Mise en miroir du trafic avec Nginx

16

J'ai besoin de dupliquer / refléter le trafic provenant de mon serveur / ressource.

Je veux dire, j'ai le serveur A et B et N (nginx) comme serveur Web.

Tout le trafic provenant de N / ressource -> rediriger vers A et B

C'est possible?

Agus
la source
2
Vous ne voulez probablement pas faire ça. Qu'essayez-vous vraiment de faire?
Michael Hampton
1
J'en ai vraiment besoin pour le faire
Agus
2
J'ai un cas d'utilisation. J'ai un client qui envoie des données sur mes serveurs que notre infrastructure de production utilise. J'ai besoin que les mêmes données soient transmises à mes serveurs de développement pour un développement ultérieur. Le client est uniquement capable d'envoyer les données à 1 point de terminaison. Ne demandez pas pourquoi, je ne sais pas.
The Dude
1
Oh j'ai besoin de dupliquer le trafic, je veux dire que le trafic sera traité par A, mais B pourra recevoir un processus hors ligne
Agus
2
J'ai trouvé une autre version de cette question avec une réponse qui m'a aidé: serverfault.com/a/515531/175380 Fondamentalement, vous définissez l'emplacement à refléter dans une post_actiondirective. Cela s'exécutera après que la demande a été satisfaite par la machine de production.
Adam Lukens

Réponses:

14

Nginx dispose désormais d'un module miroir http. La documentation est à https://nginx.org/en/docs/http/ngx_http_mirror_module.html

Exemple de configuration de la documentation:

location / {
    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}
Slack Undertow
la source
Existe-t-il un moyen d'utiliser un miroir même si l'un des hôtes est en panne, j'ai un cas d'utilisation pour cela.
Sagar Kharab
3

Voici une nouvelle fonctionnalité de nginx (1.13.4): http://nginx.org/en/docs/http/ngx_http_mirror_module.html#mirror

Le module ngx_http_mirror_module (1.13.4) implémente la mise en miroir d'une requête d'origine en créant des sous-requêtes de miroir d'arrière-plan. Les réponses aux sous-demandes miroir sont ignorées.

BLiN
la source
2

Sur la base de leur README, il semble que GOR pourrait vous aider à résoudre votre problème.

Je ne l'ai jamais utilisé auparavant, je suis juste tombé dessus cette semaine, alors bonne chance!

Marcel
la source
Hé sur l'utilisation de GOR, il reconnaît juste avec un http 200. Donc, s'il a un objet de réponse ou une validation qu'il veut faire avec ce que le client lui envoie, je ne pense pas que cela fonctionnera pour lui. Pour autant que je sache, et je suis nouveau sur Gor, vous ne pouvez pas transmettre l'objet résultat de l'un de vos segments de sortie.
PatrickWalker
Nous testons actuellement le GOR et nous avons quelques problèmes. Il interprète les en-têtes comme: Location: // newpath générant des requêtes comme GET // newpath. Redirige les en-têtes originaux lâches (y compris l'agent utilisateur hôte, etc.) Nous migrons vers un autre outil.
Aalex Gabi
1

vous ne pouvez pas mettre en miroir les demandes avec NGINX mais la demande est disponible en tant que variable. Vous pouvez cependant utiliser les scripts Lua pour envoyer cette variable à un serveur tiers en tant que sous-requête. http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request

Mohammad Mahzoun
la source
0

Après avoir creusé et creusé, j'ai trouvé une solution. Vous pouvez le voir ici Copier et envoyer une demande à un autre serveur nginx pour des tests de trafic réel par @scari

Je pensais juste que je devrais le mentionner ici pour faciliter la recherche d'autres personnes. Dans ma configuration, je n'ai pas utilisé uwsgi - au lieu de cela, je voulais dupliquer chaque demande entrante sur des serveurs supplémentaires (en plus des serveurs principaux qui étaient déjà équilibrés en charge).

J'espère que cela vous aidera,
Liron

Liron
la source