Мне нужно передать имя клиента вышестоящим серверам с помощью модуля потоков.
Я использую Nginx 1.15 для балансировки нагрузки трафика UDP-трафика c (протоколы sFlow, ipfix, netflow) из службы переадресации на основе Samplicator . Nginx прослушивает каждый протокол на другом порту и распределяет нагрузку по этим данным в пуле экземпляров Logsta sh.
Проблема в том, что Nginx перезаписывает данные 'host' в 'localhost'. Значение 'host' ранее было именем или IP-адресом сетевого коммутатора, передающего данные потока. Все данные потока бесполезны, если поле «host» не повреждено сетевым коммутатором. Мне нужен способ передать хост в пул вышестоящих серверов с помощью модуля Nginx Stream.
Если бы это был http, я бы просто добавил несколько опций заголовка прокси:
http {
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}
Однако, с модулем Stream, лучший поддерживаемый вариант, который я нашел, это использовать proxy_bind $remote_addr transparent;
:
server {
listen 6343 udp;
proxy_bind $remote_addr transparent;
proxy_pass logstash_sflow;
proxy_responses 0;
error_log /var/log/udp-sflow.log warn;
}
Однако, прочитав о proxy_bind
с параметром transparent
, я обеспокоен тем, что это может повлиять на производительность, если единственная причина, по которой я хочу это оставьте поле «хост» нетронутым от клиента.
Есть ли лучший вариант для передачи имени клиента UDP вышестоящим серверам?