Varnish – dirección IP cliente

Por defecto, sino modificamos nada del comportamiento de Varnish, podemos tener algún problemilla, con el tema del acceso de las IPs. Hacemos una petición a la IP del servidor Varnish, Varnish la transmite al backend y la devuelve. Pero en los logs del backend, sino lo tenemos bien configurado, veremos como que la IP registrada no es la nuestra, sino la del propio varnish server. O más sencillo, si trabajamos por ejemplo con un backend con PHP veremos que la variable REMOTE_ADDR nos devuelve la IP del servidor Varnish, no la IP del cliente original. Si trabajamos con Apache, nos será fácil corregir esto con el mod_rpaf. Además, hay que editar el archivo de VCL para modificar este comportamiento.

Si leemos la documentación de Varnish, esto ya pertenece a la categoría de FAQs.

“We will need to add the IP address to a header used for the backend request, and configure the backend to log the content of this header instead of the address of the connecting client (which is the varnish server).”

La parte del log no la veremos de momento. El entorno en el que trabajaremos es Varnish + Apache. Primero, probaremos a utilizar los consejos de las FAQs de Varnish. Editamos el fichero de VCL y reiniciamos el servicio para ver que cambios se producen. Para eso subiremos un archivo a web, para que podamos comprobar rápido los cambios.

1. Editamos el fichero VCL
# vim /etc/varnish/default.vlc

sub vcl_recv {
# Configuramos un header unico que contiene la direccion del cliente
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
# [...]
}

2. Reiniciamos y comprobamos la variable PHP(es una opción). Podemos subir este código para ver los cambios

[cc lang=”php”]
$clientip = $_SERVER[‘HTTP_CLIENT_IP’];
$remoteaddr = $_SERVER[‘REMOTE_ADDR’];
$xforwardedfor = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
echo ”

  • HTTP_CLIENT_IP: $clientip
  • \n”;
    echo ”

  • REMOTE_ADDR: $remoteaddr
  • \n”;
    echo ”

  • HTTP_X_FORWARDED_FOR: $xforwardedfor
  • \n”;
    ?>
    [/cc]

    Nota: antes del punto 3 hacemos

    [cc]
    # yum install httpd-devel -y
    [/cc]

    3. Casi seguro que, aún a pesar de haber modificado correctamente nuestro fichero VCL, no conseguimos ver correctamente nuestra IP. El “problema” como vemos está a caballo entre Apache y Varnish. Necesitamos un paso más, si queremos seguir utilizando la caché de Varnish conjuntamente con nuestro Apache. Se trata de instalar el mod Rpaf.

    [cc]
    # cd /root/
    # wget http://www.stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
    # tar zxvf mod_rpaf-0.6.tar.gz
    # cd mod_rpaf-0.6
    # sed -i ‘s/APXS2=\$(shell which \(apxs2\))/APXS2=\$(shell which apxs)/’ Makefile
    # make rpaf-2.0 && make install-2.0
    # echo “LoadModule rpaf_module modules/mod_rpaf-2.0.so” >> /etc/httpd/conf.d/mod_rpaf.conf
    # echo “RPAFenable On” >> /etc/httpd/conf.d/mod_rpaf.conf
    # echo “RPAFsethostname On” >> /etc/httpd/conf.d/mod_rpaf.conf
    # echo “RPAFproxy_ips 127.0.0.1” >> /etc/httpd/conf.d/mod_rpaf.conf
    # echo “RPAFheader X-Forwarded-For” >> /etc/httpd/conf.d/mod_rpaf.conf
    # service httpd restart
    [/cc]

    4. Ahora deberíamos poder reiniciar Varnish y al comprobar de nuevo el código, observar que ya nos muestra la IP correcta.

    Links

    2 thoughts on “Varnish – dirección IP cliente

    1. Pingback: Varnish & Wordpress – Ips y comentarios | Rubén Ortiz

    Leave a Reply

    Your email address will not be published. Required fields are marked *