У меня проблема с HAproxy.
Я использую HAproxy в качестве балансировщика нагрузки, который распределяет входящие http-запросы на 5 веб-серверов. обычно клиентские запросы направляются на веб-серверы с IP-адресом loadbalancer. Но мне нужны клиентские IP-адреса или реальные IP-адреса, которые запрашивают что-то с веб-серверов. Потому что нам нужно регистрировать IP-адреса реальных клиентов.
Я пытаюсь получить IP-адреса клиентов на веб-серверах, но до сих пор не могу добиться успеха. Всегда вижу IP балансировщика нагрузки.
Я использую опцию x-forward-for, но проблема не решена. После этого я нашел другую опцию « source 0.0.0.0:80 использует rc clientip », но у меня возникла ошибка при попытке запустить HAproxy, что касается компиляции с опцией USE_TPROXY опции HAproxy. Я сделал это, я перекомпилирую HAproxy с опцией USE_TPROXY, но ничего не меняет. что я могу сделать, чтобы узнать реальные IP-адреса клиента.
Моя версия ядра Linux - 2.6.32-34. Я имею в виду, что ядро поддерживает прозрачный прокси. и я использую UBUNTU 10.4 LTS
мой конфигурационный файл здесь
global
maxconn 100000
uid 99
gid 99
daemon
defaults
option forwardfor except 127.0.0.1
mode http
(1)source 0.0.0.0:80 interface hdr_ip(x-forwarded-for,-1)
(2)source 0.0.0.0:80 usesrc clientip
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen myWeb 0.0.0.0:80
mode http
balance source
option forwardfor header X-Client
option http-server-close
stats enable
stats refresh 10s
stats hide-version
stats scope .
stats uri /lb?stats
stats realm LB2\ Statistics
stats auth admin:xXx
server S1 192.168.1.117:80 check inter 2000 fall 3
server S2 192.168.1.116:80 check inter 2000 fall 3
server S3 192.168.1.118:80 check inter 2000 fall 3
(1) (2) При тестировании HAproxy я использовал одну из этих двух строк.
Кто-нибудь помогает мне узнать реальные IP-адреса клиентов, которые запрашивают наши серверы?
Ответы:
Я решил эту проблему. Может быть, это не было проблемой с самого начала. Я сделал поиск в Google, когда столкнулся с этой проблемой, и я увидел, что
строка для использования в файле haproxy.cfg, а также другие параметры. Я попробовал эти варианты, включая перекомпиляцию haproxy ... Но настоящая проблема, связанная с изучением реальных IP-адресов клиентов на веб-серверах, не исходит от HAproxy, а заключается в чтении заголовков серверными сценариями, в нашем случае этот язык сценариев - PHP.
Я пытаюсь узнать IP-адреса клиента по этим командам
и эти команды отображают IP-адрес loadbalancer. Это правильно, но это не то, чего я ожидаю. Несмотря на опцию forwardfor этих команд, мне дали IP loadbalancer
Используя опцию forwardfor, мы включаем HAproxy для вставки заголовка x-forwarded-for в запросы клиента, отправляемые на наши веб-серверы. HAproxy поместил это поле в заголовок, но я проигнорировал это. Сегодня я понял, что это поле заголовка, и я должен прочитать этот заголовок, как это
С помощью этой команды я получил IP-адрес клиента, а не IP-адрес loadbalancer.
Но мое предложение состоит в том, чтобы получить данные заголовка для исследования другой информации - это функция getallheaders () для PHP.
Конец всего моего последнего файла haproxy.cfg, как показано ниже.
Тем не менее, у меня много пропущенных вещей в HAproxy, таких как значение uid или gid.
источник
Если вам нужен клиентский IP-адрес в журнале Apache, вы можете изменить свой apache conf для регистрации X-forwarded-for вместо исходного источника (5h)
источник
Только что попробовал решение @ System, и кажется, что название заголовка было изменено с
HTTP_X_FORWARDED_FOR
наx-forwarded-for
. Возможно, это связано с версией HAproxy, потому что ответ был написан 5 лет назад ...?Как пример, это работает на производстве:
String requestIp = httpRequest.getHeader("x-forwarded-for");
источник