2012-04-05 19 views
6

He configurado Varnish 3 con Apache y está funcionando perfectamente bien. Sin embargo, no puedo hacer que el cliente IP inicie sesión en los registros de Apache. Intenté algunas soluciones buscando en Google sin suerte. En este momento, mi archivo de registro de acceso Apache está registrando la IP del servidor en lugar de las direcciones IP del cliente.Varnish Client IP no inicia sesión en Apache Logs

Éstos son mis configuraciones para su amable consideración:

barniz 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

...... Otras Cosas ..... registros ErrorLog/FR-error-log CustomLog logs/FR-aduana-registro varnishcombined ...... Otras Cosas .....

Nota: barniz versión instalada es de lacas 3.0.2-1.el5.x86_64

Gracias. Raheel

Respuesta

12

Creo que usted ha tenido una configuración de trabajo en su ejemplo Pastebin, en realidad esto debe hacer el truco:

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

En su vcl_recv {}.

+0

Al ignorar el código anterior, aparece la dirección IP del cliente real en $ _SERVER ["HTTP_X_FORWARDED_FOR"] pero $ _SERVER ["REMOTE_ADDR"] aún muestran la IP del servidor. Además, el archivo de registro de acceso de Apache aún muestra la IP del servidor para cada solicitud. Alguna pista ? –

+0

Después de pasar algún tiempo he encontrado la solución, es el Módulo Apache RPAF. http://www.amgeekblog.com/mod_rpaf-in-ubuntu-and-centos/.Después de usar este módulo, ahora obtengo la dirección IP adecuada del cliente en el archivo de registro de Apache, así como en la variable global $ _SERVER ['REMOTE_ADDR'] en PHP también. ¡Gracias! –

+1

¿No debería el IP del cliente ser el primero? (es decir, 'client.ip +", "+ req.http.X-Forwarded-For') –

9

añadir esta línea a su 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; 

} 

continuación, cambiar el formato de registro de Apache

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

Y ahora en su Virtualhost

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

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

</VirtualHost> 
+0

Esto funcionó perfecto para mí, gracias. – stedotmartin

10

A medida que la OP se menciona en los comentarios, la solución es un módulo de Apache. Varnish agrega el encabezado X-Forwarded-For de forma predeterminada.

Entonces un módulo de Apache como mod_rpaf (Apache 2.2) o mod_remoteip (Apache 2.4) establecerá el valor remote_ip a la aprobada en la cabecera X-Forwarded-For.

Esto proporciona una solución mucho más sólida que simplemente registrar el valor del encabezado X-Forwarded-For en sus registros de Apache. Por ejemplo, le permite acceder al mismo sitio en 2 direcciones IP, a través de Varnish o directamente, y el sitio funciona como era de esperar y se registra correctamente.

+0

¿Alguien tuvo éxito con mod_remoteip? No he podido hacer que funcione con Apache 2.4.7 + Varnish 4.0.1 y no he encontrado a nadie más que lo haya hecho. – curiouser

+0

Para cualquier persona interesada, logré que mod_remoteip funcione. Lo publiqué aquí: http://stackoverflow.com/questions/25455731/getting-apache-2-4-access-logs-to-show-client-ip-instead-of-127-0-0-1-with -varni – curiouser

Cuestiones relacionadas