Rappel de l'architecture :

schema_haproxy_archi

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