Зеркальное отображение трафика с Nginx

16

Мне нужно дублировать / отражать трафик, поступающий на мой сервер / ресурс.

Я имею в виду, у меня есть сервер A и B и N (nginx) в качестве веб-сервера.

Весь трафик, поступающий на N / ресурс -> перенаправить на A и B

Является ли это возможным?

АГУС
источник
2
Вы, вероятно, не хотите делать это. Что ты на самом деле пытаешься сделать?
Майкл Хэмптон
1
Мне действительно нужно это сделать
Agus
2
У меня есть случай использования. У меня есть клиент, отправляющий данные на мои серверы, которые использует наша производственная инфраструктура. Для дальнейшей разработки мне нужны точно такие же данные, которые были отправлены на мои dev-серверы. Клиент может отправлять данные только на 1 конечную точку. Не спрашивай почему, я не знаю.
Чувак
1
О, мне нужно дублировать трафик, я имею в виду, что трафик будет обрабатываться A, но B получит автономный процесс
Agus
2
Я нашел другую версию этого вопроса с ответом, который мне помог: serverfault.com/a/515531/175380 По сути, вы устанавливаете расположение, которое будет отражено в post_actionдирективе. Это будет выполнено после того, как запрос был удовлетворен производственной машиной.
Адам Лукенс

Ответы:

14

Nginx теперь имеет зеркальный модуль http. Документация находится по адресу https://nginx.org/en/docs/http/ngx_http_mirror_module.html.

Пример конфигурации из документации:

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

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}
Slack Undertow
источник
Есть ли способ, которым я могу использовать зеркало, даже если один из хостов не работает, у меня есть вариант использования для этого.
Сагар Хараб
3

Вот новая функция от nginx (1.13.4): http://nginx.org/en/docs/http/ngx_http_mirror_module.html#mirror

Модуль ngx_http_mirror_module (1.13.4) реализует зеркалирование исходного запроса путем создания подзапросов фонового зеркалирования. Ответы на зеркальные подзапросы игнорируются.

BLIN
источник
2

На основании их README похоже, что GOR может помочь вам решить вашу проблему.

Я никогда не использовал его раньше, просто наткнулся на это на этой неделе, так что удачи!

завивать волосы щипцами
источник
Привет, используя GOR, он просто подтверждает с http 200. Так что, если у него есть объект ответа или проверка, которую он хочет сделать с тем, что отправляет ему клиент, я не думаю, что это сработает для него. Насколько я могу судить, и я новичок в Gor, вы не можете передать объект результата из одного из ваших выходных сегментов.
PatrickWalker,
Мы сейчас тестируем GOR и у нас есть пара проблем. Он интерпретирует заголовки как: Location: // newpath генерирует запросы как GET // newpath. Перенаправляет потерянные оригинальные заголовки (включая hostragent хоста и т. Д.). Мы переходим на другой инструмент.
Аалекс Габи
1

вы не можете зеркально отразить запросы с помощью NGINX, но запрос доступен как переменная. Вы можете использовать сценарии Lua для отправки этой переменной на сторонний сервер в качестве дополнительного запроса. http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request

Мухаммед Махзун
источник
0

После копания и копания я нашел решение. Вы можете увидеть его здесь. Скопируйте и отправьте запрос на другой сервер nginx для проверки реального трафика @scari.

Просто подумал, что должен упомянуть об этом здесь, чтобы облегчить поиск других людей. В моей настройке я не использовал uwsgi - вместо этого я хотел дублировать каждый входящий запрос на дополнительные серверы (в дополнение к магистральным серверам, которые уже были сбалансированы по нагрузке).

Надеюсь, это поможет,
Лирон

Liron
источник