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.sh)"
Управление сервисом:
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.