Я пытаюсь реплицировать трафик, который получает один конкретный сервер nginx, на два сервера. Цель состоит не в балансировке нагрузки, а в воспроизведении одинаковых входных данных на всех серверах nginx.
Пример: Nginx получает HTTP POST. Я хочу отправить этот же POST на другие серверы.
** ОБНОВИТЬ **
Ситуация простая и несложная. Мне просто нужно повторно отправить данные POST (или GET или любые данные запроса) на другой IP-адрес сервера (он также работает с экземпляром nginx). Только это.
ПОЛЬЗОВАТЕЛЬ -> POST DATA -> NGINX INSTANCE ---- REDIRECT ---> SERVER 1 И SERVER 2
Ответы:
Я был в состоянии копировать, используя состояние post_action.
Теперь он отправляет данные двум серверам.
Если ваш апстрим не поддерживает fastcgi (произошло в моем случае), замените его на proxy_pass.
источник
Я не верю, что вы можете сделать это с помощью nginx; быстрое изучение соответствующих битов документации nginx (директивы upstream и proxy) не говорит о том, что вы можете это сделать. Как отмечено в комментариях, это также нарушает HTTP, так как нет ясности, какой из двух задних серверов будет отвечать.
Один из вариантов - использовать что-то вроде лака и выполнить воспроизведение на втором тыловом сервере, используя varnishreplay:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
Я не использовал его, поэтому не знаю, сможете ли вы заставить его воспроизводить трафик почти одновременно с первым тыловым сервером.
источник
То, что вы хотите использовать, это что-то вроде EM-Proxy [1]. Он легко справляется с разделением http-запросов на любое количество серверов. Он также правильно обрабатывает возврат данных только с живого сервера и блокирует другие, чтобы пользователь не получил несколько ответов.
[1] https://github.com/igrigorik/em-proxy/
источник
Используйте центральное хранилище, как сервер NFS, и каждый веб-узел nginx устанавливает общий ресурс NFS (на уровне файлов). Или используйте кластерную файловую систему, такую как OCFS2, и каждый веб-узел монтирует LUN / раздел (на уровне блоков).
источник