Apache mod_remoteip i dzienniki dostępu

9

Od Apache 2.4 zacząłem używać mod_remoteip zamiast mod_extract_forwarded do przepisywania adresu klienta z X-forwarded-for dostarczanych przez serwery frontendowe (lakier, kałamarnica, apache itp.).

Jak dotąd wszystko działa poprawnie z modułami, tj. Php, cgi, wsgi itp ... - adresy klientów są wyświetlane tak, jak powinny, ale nie mogłem zapisać adresu klienta w dziennikach dostępu (% a,% h,% {c }za). Bez powodzenia - zawsze dostaję 127.0.0.1 (np. Localhost forward).

Jak zalogować adres IP klienta podczas korzystania z mod_remoteip?

Aktualizacja: TO DZIAŁA O_O - patrz odpowiedź poniżej

GioMac
źródło
możesz dodać konkretną konfigurację, której używasz / testowałeś. Dodatkowo, chociaż nie szczegółowo, może to pomóc: knowledgevoid.com/blog/2012/01/13/… Zakładam, że przeczytałeś również httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header ? stackexchange ma kilka pytań, które możesz przeczytać: stackoverflow.com/questions/25455731/...
Dennis Nolte
przebudowana konfiguracja, teraz działa O_O
GioMac

Odpowiedzi:

20

konfiguracja lakieru:

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;
    }
}

sekcje konfiguracji apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

logowanie (% a wykonuje zadanie):

LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

+

jeśli z przodu jest nginx (np. zakończenie SSL):

server {
    listen       123.123.123.123:443;
    server_name  server.com;
    root         html;

    ssl                  on;
    ssl_certificate      /etc/pki/httpd/site/chain.crt;
    ssl_certificate_key  /etc/pki/httpd/site/private.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass   http://127.0.0.1:6081;
        proxy_set_header Host $http_host;
        proxy_pass_header Server;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}
GioMac
źródło
1
Jeśli zaakceptujesz tę odpowiedź, powinieneś przyznać nagrodę, nawet jeśli jest to Twoja własna odpowiedź.
mc0e
Czy mógłbyś zaktualizować to, czy podać nam odmianę http.cf-Connecting-ip z CloudFlare? Przepraszam, nie miałem szczęścia.
Ruslan Abuzant,
Powinieneś użyć $ proxy_add_x_forwarded_for zamiast $ remote_addr dla Nginx X-Forwarded-For. Działa tak samo, jak przykład z Varnish, podczas gdy $ remote_addr nie zawiera poprzednich wartości X-Forwarded-For
Andy
4

Zgodnie z dokumentacją mod_remoteip moduł powinien po prostu zastąpić adres IP klienta, ale tylko wtedy, gdy RemoteIPHeader x-forwarded-forjest ustawiony ( doc ). Upewnij się także, że rejestrowanie twojego vhosta korzysta ze zdefiniowanego przez ciebie CustomLog.

Sgaduuw
źródło