Пример nginx конфигурации для задачи зеркалирования входящего потока http запросов на два сервера

Область применения
Данный пример конфигурации использовался для решения реальной задачи, формулировка которой звучала так (схематично на рисунке выше):
“У нас имеется основной и тестовый сервер , необходимо клонировать входящий поток http запросов между двумя серверами так, чтобы ответ (response) приходил только от первого, но при этом оба сервера обрабатывали запрос (request)”.
Решение
Создадим конфигурацию в Nginx, которая будет принимать запросы на 8082 порту, зеркалирование будет проходить между двумя серверами:
- 1.1.1.1 - Основной сервер (с обработкой)
- 2.2.2.2 - Тестовый сервер (с обработкой, но без ответа на запрос)
server { listen 8082; location / { proxy_pass http://1.1.1.1:4500; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; mirror /mirror; mirror_request_body on; } location /mirror { internal; proxy_pass http://2.2.2.2:4500$request_uri; access_log off; error_log /dev/null crit; } }
В качестве тестирования можно использовать подготовленный мной web-сервис с единственный endpoint: POST-запрос с маршрутом /api/info
, ссылка на githib.
Быстро развернуть API-сервис на вашем ubuntu/debian сервере (пример для root-пользователя):
sudo bash -c "$(curl -sL https://raw.githubusercontent.com/meanother/hapi/main/init.s...)"
Управление сервисом:
systemctl start hapi systemctl enable hapi systemctl status hapi
Файл systemd: /etc/systemd/system/hapi.service
Проверка запроса к Nginx (заменить proxy_server на ваш адрес балансировщика):
curl -X POST -d '{"k": "v"}' http://proxy_server:8082/api/info
Полезные материалы
Большое спасибо всем за внимание! Если вам интересны подобные рассуждения - подписывайтесь на мой канал artydev & Co.