Apache mod_remoteip e logs de acesso

9

Desde o Apache 2.4 , comecei a usar o mod_remoteip em vez de mod_extract_forwarded para reescrever o endereço do cliente a partir do x-forwarded fornecido pelos servidores de front-end (verniz, squid, apache etc.).

Até agora, tudo funciona bem com os módulos, ou seja, php, cgi, wsgi etc ... - os endereços dos clientes são mostrados como deveriam, mas eu não consegui escrever o endereço do cliente nos logs de acesso (% a,% h,% {c }uma). Sem sorte - estou sempre recebendo 127.0.0.1 (localhost forward ex.).

Como registrar o endereço IP do cliente ao usar mod_remoteip?

Atualização: FUNCIONA O_O - veja a resposta abaixo

GioMac
fonte
você pode querer adicionar a configuração específica que você usa / testou. Além disso, embora não esteja em detalhes, isso pode ajudar: knowledgevoid.com/blog/2012/01/13/… Suponho que você leu httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header também? Stackexchange tem algumas perguntas que você pode querer ler: stackoverflow.com/questions/25455731/...
Dennis Nolte
reconstruída a configuração, agora funciona O_O
GioMac

Respostas:

20

configuração de verniz:

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

seções de configuração do apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

log (% a faz o trabalho):

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

+

se houver um nginx na frente (por exemplo, terminação 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
fonte
1
Se você aceitar esta resposta, conceda a recompensa, mesmo que seja sua própria resposta.
Mc0e 31/08/14
Você poderia atualizar isso ou fornecer a variação para http.cf-connect-ip do CloudFlare? Não tive sorte em fazê-lo funcionar, desculpe.
Ruslan Abuzant 9/16
Você realmente deve usar $ proxy_add_x_forwarded_for em vez de $ remote_addr para o Nginx X-Forwarded-For. Que faz a mesma funcionalidade que o exemplo Varnish, enquanto $ remote_addr não inclui anterior X-transmitido-Para valores
Andy
4

De acordo com a documentação do mod_remoteip , o módulo deve simplesmente substituir o endereço IP do cliente, mas somente quando RemoteIPHeader x-forwarded-forestiver definido ( doc ). Verifique também se o registro do seu vhost utiliza o CustomLog que você definiu.

Sgaduuw
fonte