Apache mod_remoteip y registros de acceso

9

Desde Apache 2.4 , comencé a usar mod_remoteip en lugar de mod_extract_forward para reescribir la dirección del cliente desde x-forward-for proporcionada por los servidores frontend (barniz, calamar, apache, etc.).

Hasta ahora todo funciona bien con los módulos, es decir, php, cgi, wsgi, etc. - las direcciones de los clientes se muestran como deberían, pero no pude escribir la dirección del cliente en los registros de acceso (% a,% h,% {c }una). Sin suerte: siempre obtengo 127.0.0.1 (localhost forward ex.).

¿Cómo registrar la dirección IP del cliente cuando utilizo mod_remoteip?

Actualización: FUNCIONA O_O - vea la respuesta a continuación

GioMac
fuente
es posible que desee agregar la configuración específica que usa / probado. Además, aunque no esté en detalles, esto podría ayudar: knowledgevoid.com/blog/2012/01/13/… Supongo que también leyó httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header también. stackexchange tiene algunas preguntas que tal vez quieras leer: stackoverflow.com/questions/25455731/…
Dennis Nolte
configuración reconstruida, ahora funciona O_O
GioMac

Respuestas:

20

configuración de barniz:

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

secciones de configuración de apache 2.4:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8

registro (% a hace el trabajo):

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

+

si hay un nginx al frente (por ejemplo, terminación 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
fuente
1
Si acepta esta respuesta, debe otorgar la recompensa, incluso si es su propia respuesta.
mc0e
¿Podría actualizar esto o darnos la variación para http.cf-connect-ip de CloudFlare? No he tenido suerte de hacerlo funcionar, lo siento.
Ruslan Abuzant
Debería usar $ proxy_add_x_forwards_for en lugar de $ remote_addr para Nginx X-Fordered-For. Eso tiene la misma funcionalidad que el ejemplo de Varnish, mientras que $ remote_addr no incluye valores X-Forwards-For anteriores
Andy
4

Según la documentación de mod_remoteip , el módulo simplemente debe reemplazar la dirección IP del cliente, pero solo cuando RemoteIPHeader x-forwarded-forestá configurado ( doc ). También asegúrese de que el registro de su vhost utiliza el CustomLog que ha definido.

Sgaduuw
fuente