Pasar la IP del cliente a Apache desde Varnish

12 July 2011
0 Comentarios

Varnish es un gran servidor para la capa estática de nuestras instalaciones Drupal y lo usamos o recomendamos en la gran mayoría de instalaciones, hay algunos casos especiales en donde debemos realizar ajustes a la configuración de Varnish o Apache para que no se nos presenten inconvenientes con algunos módulos como el API de votación cuando requerimos hacer bloqueo por IP, dado que Apache envía la respuesta directamente a Varnish y no al navegador del usuario, la IP que registraremos será la IP local 127.0.0.1

 

Para solucionar esto, podemos hacer uso del módulo RPAF para Apache que básicamente nos permite tomar la IP registrada por el proxy que está delante de nuestro Apache y la aplica a la dirección remota en Apache, pueden ampliar la información en: http://www.stderr.net/apache/rpaf/

Para realizar la instalación del módulo seguimos los siguientes pasos (Estos fueron realizados en la distribución Linux CentOS 5).

 #yum install httpd-devel

# 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

Después de instalar el módulo a partir de la compilación de lo binarios, porcedemos a habilitarlo y establecer la configuración para Apache, de tal forma que creamos un archivo llamado rpaf.conf en el directorio de archivos de configuración de Apache.

# nano /etc/httpd/conf.d/mod_rpaf.conf

Este archivo debe contener las siguientes instrucciones:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For

 

Finalmente reiniciamos Apache.

 

# service httpd restart

 

Para comprobar si nuestros cambios funcionan, podemos ejecutar el siguiente script en PHP

 

<?php

$clientip = $_SERVER['HTTP_CLIENT_IP'];
$remoteaddr = $_SERVER['REMOTE_ADDR'];
$xforwardedfor = $_SERVER['HTTP_X_FORWARDED_FOR'];

 

echo "<li>HTTP_CLIENT_IP:  $clientip</li> \n";
echo "<li>REMOTE_ADDR:  $remoteaddr</li> \n";
echo "<li>HTTP_X_FORWARDED_FOR:  $xforwardedfor</li> \n";

 

Este artículo está basado en el artículo publicado por Rubén Ortiz en: http://www.rubenortiz.es/2011/07/01/varnish-direccion-ip-cliente/