HAPRoxy - Module RPAF
Alasta 21 Juillet 2013 ha Apache CentOS HA Proxy Linux Load Balancer Open Source Reverse Proxy
Description : Dans cette partie nous allons voir le module RAPF (Reverse Proxy Add Forward), pour avoir l'IP cliente dans les logs des serveurs web.
Rappel de l'architecture :
Je ne sais pas si vous avez regardé les logs (/var/log/httpd/access_log) des serveurs backend apache, mais les IP clientes sont vues comme l'IP de HAProxy (10.0.0.250) :
10.0.0.250 - - [20/Jul/2013:15:20:23 +0200] "GET /image3.png HTTP/1.1" 200 4365 "http://192.168.5.18/index2.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0" 10.0.0.250 - - [20/Jul/2013:15:20:23 +0200] "GET /image1.png HTTP/1.1" 200 4184 "http://192.168.5.18/index2.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0"
Cela peut être gênant pour analyser les logs ou faire des statistiques ! Pour régler cela il y a deux actions à faire :
- Activer le forwardfor sur HAProxy
Cela va avoir pour effet d'ajouter l'IP cliente au header X-Forwarded-For.
Configuration de haproxy.cfg
backend bk_apache balance roundrobin mode http option forwardfor server apache1 10.0.0.1:80 check server apache2 10.0.0.2:80 check server apache3 10.0.0.3:80 check
- Activer le module rpaf sur les serveurs de backend Apache
Sous CentOS le module n'est pas disponible, il faut le compiler à la main :
yum install -y httpd-devel cd /usr/src wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz tar xzvf mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Editer /etc/httpd/conf/httpd.conf et ajouter
LoadModule rpaf_module modules/mod_rpaf-2.0.so
Editer le fichier /etc/httpd/conf.d/mod_rpaf.conf
<IfModule rpaf_module> RPAFenable On RPAFsethostname On RPAFheader X-Forwarded-For #IP HAProxy et localhost RPAFproxy_ips 10.0.0.250 127.0.0.1 </IfModule>
Redémarrer Apache
service httpd restart
Visualiser le résultat dans les logs d'accès (/var/log/httpd/access_log) :
tail -f /var/log/httpd/access_log 192.168.5.26 - - [20/Jul/2013:22:55:03 +0200] "GET /image4.png HTTP/1.1" 200 4780 "http://192.168.5.18/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0" 192.168.5.26 - - [20/Jul/2013:22:55:03 +0200] "GET /image2.png HTTP/1.1" 200 4835 "http://192.168.5.18/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0"
Voila pour ce qui est de voir l'IP cliente au niveau des backends apache.
Note :
Certains serveurs de backends ne supportent pas le header X-Forward-For, certains utilisent le header X-Client, X-Cluster-Client-IP, ...
Il faut positionner la configuration suivante :
option forwardfor header X-Client