Mam problem z HAproxy.
Używam HAproxy jako modułu równoważenia obciążenia, który dystrybuuje przychodzące żądania HTTP do 5 serwerów WWW. zwykle żądanie klienta jest przekazywane do serwerów WWW z adresem IP modułu równoważenia obciążenia. Ale potrzebuję adresów IP klientów lub prawdziwych adresów IP, którzy żądają czegoś od serwerów sieciowych. Ponieważ musimy rejestrować rzeczywiste adresy IP klientów.
Próbuję uzyskać adresy IP klientów na serwerach internetowych, ale do tej pory nie mogę osiągnąć sukcesu. Zawsze widzę adres IP modułu równoważenia obciążenia.
Używam opcji x-forward-for, ale to nie rozwiązało problemu. Potem znalazłem inną opcję „ source 0.0.0.0:80 usesrc clientip ”, ale dostałem błąd podczas próby uruchomienia HAproxy, która dotyczy potrzeb kompilacji z opcją USE_TPROXY HAproxy. Zrobiłem to, ponownie kompiluję HAproxy z opcją USE_TPROXY, ale niczego nie zmieniam. co mogę zrobić, aby poznać prawdziwe adresy IP klientów.
Moja wersja jądra Linuksa to 2.6.32-34 Mam na myśli, że jądro obsługuje przezroczyste proxy. i używam UBUNTU 10.4 LTS
mój plik konfiguracyjny jest tutaj
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) Podczas testowania HAproxy użyłem jednej z tych dwóch linii.
Czy ktoś pomaga mi poznać prawdziwe adresy IP klientów, którzy są żądani od naszych serwerów?
Odpowiedzi:
Rozwiązałem ten problem. Być może od samego początku nie było problemu. Przeprowadziłem wyszukiwanie w Google, gdy napotkałem ten problem, i zobaczyłem to
wiersz w celu użycia w pliku haproxy.cfg, a także w innych opcjach. Próbowałem tych opcji, w tym ponownej kompilacji haproxy ... Ale prawdziwy problem związany z uczeniem się prawdziwych adresów IP klientów na serwerach internetowych nie pochodzi od HAproxy, chodzi o czytanie nagłówków przez skrypty serwera, w naszym przypadku tym językiem skryptowym jest PHP.
Staram się poznać adresy IP klienta za pomocą tych poleceń
i te polecenia wyświetlają adres IP modułu równoważącego obciążenie. To prawda, ale nie tego się ode mnie oczekuje. Pomimo opcji forwardfor te polecenia dały mi IP loadbalancera
Korzystając z opcji forwardfor, umożliwiamy HAproxy wstawianie nagłówka x-forwarded-for do żądań klienta wysyłanych na nasze serwery sieciowe. HAproxy umieścił to pole w nagłówku, ale zignorowałem to. Dziś zdałem sobie sprawę, że jest to pole nagłówka i muszę przeczytać ten nagłówek w ten sposób
Za pomocą tego polecenia uzyskałem adres IP klienta, a nie adres IP modułu równoważącego obciążenie.
Ale moja oferta ma na celu uzyskanie danych nagłówka w celu zbadania innych informacji o funkcji getallheaders () dla PHP.
Koniec całego mojego ostatniego pliku haproxy.cfg jest jak poniżej.
Niemniej jednak mam wiele brakujących informacji na temat HAproxy, takich jak znaczenie uid lub gid.
źródło
Jeśli potrzebujesz adresu IP klienta w dzienniku Apache, możesz zmienić swój apache conf, aby zalogować X-to-source zamiast oryginalnego źródła (5h)
źródło
Właśnie wypróbowałem rozwiązanie @ System i wygląda na to, że nazwa nagłówka została zmieniona z
HTTP_X_FORWARDED_FOR
nax-forwarded-for
. Prawdopodobnie jest to związane z wersją HAproxy, ponieważ odpowiedź została napisana 5 lat temu ...?Na przykład działa to na produkcji:
String requestIp = httpRequest.getHeader("x-forwarded-for");
źródło