Nginx Потоковый модуль и трафик балансировки нагрузки UDP. - PullRequest
0 голосов
/ 25 марта 2020

Мне нужно передать имя клиента вышестоящим серверам с помощью модуля потоков.

Я использую 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 вышестоящим серверам?

...