Я строю свой собственный балансировщик нагрузки в C++. Но мне не хватает фундаментальных знаний о том, как запросы / ответы протекают в такой конфигурации маршрутизации.
Предположим, у меня есть приложение на www.application.com
и что DNS возвращает ip-адрес балансировщика нагрузки по запросу. IP клиента является client_ip
один Balancer является balancer_ip
и сервера - server_ip
Итак, вот последовательность пакетов, сгенерированных в сети:
1) Первый пакет генерируется клиентом, запрашивающим балансировщик нагрузки:
+-----------+-------------+---------+
| Source | Destination | Request |
+-----------+-------------+---------+
| client_ip | balancer_ip | /hello |
+-----------+-------------+---------+
2) Второй генерируется балансировщиком, который отправляет запрос на сервер и помещает client_ip
в заголовок X-Forwarded-For
:
+-------------+-------------+---------+-----------------+
| Source | Destination | Request | X-Forwarded-For |
+-------------+-------------+---------+-----------------+
| balancer_ip | server_ip | /hello | client_ip |
+-------------+-------------+---------+-----------------+
3) Сервер получает запрос и возвращает ответ на балансировщик нагрузки. X-Forwarded-For
остается прежним.
+-----------+-------------+------------------+-----------------+
| Source | Destination | Response | X-Forwarded-For |
+-----------+-------------+------------------+-----------------+
| server_ip | balancer_ip | response_message | client_ip |
+-----------+-------------+------------------+-----------------+
4) Balancer получает ответ от сервера и создает свой собственный ответ обратно клиенту, беря ip-адрес клиента из заголовка X-Forwarded-For
и помещая его в место назначения:
+-------------+-------------+------------------+
| Source | Destination | Response |
+-------------+-------------+------------------+
| balancer_ip | client_ip | response_message |
+-------------+-------------+------------------+
Предположим, что все коммуникации выполняются в HTTP. Это правильный способ выполнения перенаправлений между клиентом - балансировщик нагрузки - сервер? Я просмотрел стандартные поля запроса / ответа, а X-Forwarded-For
не было в списке стандартных и нестандартных ответов. Также, если это правильный путь, не будут ли такие популярные фреймворки, как Spring, Django, Node.js, отбрасывать заголовок X-Forwarded-For
?