2012-04-05 13 views
6

Skonfigurowałem Varnish 3 za pomocą Apache i działa on idealnie. Jednak nie mogę uzyskać IP klienta zalogowanego w dziennikach Apache. Wypróbowałem kilka rozwiązań googlujących bez szczęścia. W tej chwili mój plik logu dostępu Apache rejestruje adres IP serwera zamiast adresów IP klienta.IP klienta Varnish nie logującego się do Logów Apache

Oto moje konfiguracje uwagę rodzaj:

Lakier VCL (/etc/varnish/default.vlc): http://pastebin.com/PuBqZ6fx

Apache Config

/etc/httpd/conf/httpd .conf

LogFormat "% {X-Forwarded-For} i% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent } i \ "" varnishcombined

Apache Virtual Host

...... Inne rzeczy ..... kłody ErrorLog/fr-error-log CustomLog logs/fr-zlecenie dziennika varnishcombined ...... Inne rzeczy .....

Uwaga: lakier wersja zainstalowana jest lakier-3.0.2-1.el5.x86_64

Dzięki. Raheel

Odpowiedz

12

Chyba miałem config pracę w Pastebin przykład, powinno to faktycznie rade:

if (req.restarts == 0) { 
    if (req.http.X-Forwarded-For) { 
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; 
    } else { 
    set req.http.X-Forwarded-For = client.ip; 
    } 
} 

W swojej vcl_recv {}.

+0

Odkomentowanie powyższego kodu daje mi rzeczywisty adres IP klienta w $ _SERVER ["HTTP_X_FORWARDED_FOR"], ale $ _SERVER ["REMOTE_ADDR"] nadal pokazuje serwer ip. Ponadto, plik dziennika dostępu Apache nadal pokazuje serwer IP dla każdego żądania. Jakieś wskazówki? –

+0

Po spędzeniu trochę czasu znalazłem rozwiązanie, to jest moduł Apache RPAF. http://www.amgeekblog.com/mod_rpaf-in-ubuntu-and-centos/.Po użyciu tego modułu otrzymuję teraz prawidłowy adres IP klienta w pliku dziennika Apache, a także w zmiennej $ _SERVER ['REMOTE_ADDR'] w PHP. Dzięki! –

+1

Czy adres IP klienta nie powinien być pierwszy? (np. 'client.ip +", "+ req.http.X-Forwarded-For") –

9

Dodaj tę linię do VCL

sub vcl_recv { 
    # Add a unique header containing the client address 
    remove req.http.X-Forwarded-For; 
    set req.http.X-Forwarded-For = client.ip; 

} 

Następnie zmień logformat Apache

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined 

a teraz w virtualhost

<VirtualHost *:8080> 
    ServerName www.abc.com 

    CustomLog /var/log/httpd/www.abc.com/access.log varnishcombined 

</VirtualHost> 
+0

To zadziałało idealnie dla mnie dzięki. – stedotmartin

10

Jako OP wspomniano w komentarzach, rozwiązaniem jest moduł Apache. Varnish dodaje domyślnie nagłówek X-Forwarded-For.

Następnie Apache'owi moduł jak mod_rpaf Apache'u (2.2) lub mod_remoteip Apache'u (2,4) ustawia się wartość remote_ip do jednego przechodzi się przez nagłówek X-Forwarded-For.

Zapewnia to o wiele bardziej niezawodne rozwiązanie niż po prostu rejestrowanie wartości nagłówka X-Forwarded-For w dziennikach apache. Na przykład pozwala na dostęp do tej samej witryny na 2 adresach IP, za pomocą programu Varnish lub bezpośrednio, a witryna działa zgodnie z oczekiwaniami i jest poprawnie rejestrowana.

+0

Ktoś miał sukces z mod_remoteip? Nie udało mi się uruchomić go z Apache 2.4.7 + Varnish 4.0.1 i nie znalazłem nikogo, kto by to zrobił. – curiouser

+0

Dla wszystkich zainteresowanych udało mi się uzyskać mod_remoteip do pracy. Wysłałem to tutaj: http://stackoverflow.com/questions/25455731/getting-apache-2-4-access-logs-to-show-client-ip-instead-of-127-0-0-1-with -varni – curiouser

Powiązane problemy