C'est dommage pour les logs, pour les authentifications, mais aussi pour une géolocalisation.
En PHP, REMOTE_ADDR contiendra toujours l’adresse IP du proxy.
Il est possible de récupérer l'adresse IP réelle en utilisant le module rpaf de Apache.
Mise en place :
- Notre reverse proxy est appelé serveur A
- Notre serveur d'application sur notre réseau interne serveur B
Configuration du reverse proxy (serveur A) :
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://www.server_b.com/
ProxyPassReverse / http://www.server_b.com/
Configuration à réaliser sur le serveur B :
1) Installation du module :
aptitude install libapache2-mod-rpaf
Le module est automatiquement configuré avec l’adresse IP comme adresse de reverse proxy.
Il faut modifier cette valeur dans le fichier : /etc/apache2/mods-enabled/rpaf.conf. Il suffit de remplacer devant RPAFproxy_ips le 127.0.0.1 par l’adresse IP de votre reverse proxy (serveur A).
Dans le cas, où il y aurait plusieurs adresses IP de reverse proxy, vous devez séparer les adresses IP par un espace.
Il faut ensuite redémarrer apache :
/etc/init.d/apache reload
C'est tout !!!
Vos logs et les valeurs récupérer dans vos sites contiennent la bonne ip !
Vous pouvez vérifier en faisant en php la commande :
echo $_SERVER["REMOTE_ADDR"];
Et si votre serveur B est sous TOMCAT ?
Si le serveur B est sous tomcat c'est un peu plus compliqué, il va falloir ruser.
Après avoir cherché longtemps, voici la méthode qui fonctionne chez moi :
1. Téléchargez le jar suivant et copiez-le dans le $TOMCAT_HOME/lib
http://xebia-france.googlecode.com/files/xebia-tomcat-extras-1.0.0.jar (http://xebia-france.googlecode.com/files/xebia-tomcat-extras-1.0.0-sources.jar)
2. Modifiez le fichier server.xml :
<Valve
className="org.apache.catalina.connector.RemoteIpValve"
internalProxies="192\.168\.20\.126"
remoteIPHeader="x-forwarded-for"
protocolHeader="x-forwarded-proto"
/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i
%{Referer}i" resolveHosts="false" / >
3. Rédémarrer Tomcat : vous pouvez accéder à l'adresse ip réelle par servletRequest.getRemoteAddr()
C'est tout :)
Aucun commentaire:
Enregistrer un commentaire