Question

Nous utilisons ProxyPass pour rediriger toutes les requêtes "/r" vers jboss sur le port 18080 comme suit :

ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/

Mais cela provoque l'adresse IP enregistrée dans le journal d'accès de jboss comme "127.0.0.1".Est-ce que quelqu'un sait comment conserver l'adresse IP d'origine d'où la demande est venue dans HttpServletRequest ?Nous voulons y accéder à partir de la requête du servlet jboss dans doGet()

Était-ce utile?

La solution

Vous pouvez obtenir l'hôte d'origine de X-Forwarded- champ d'en-tête .

Autres conseils

La réponse de JasonW est très bien. Mais depuis apache httpd 2.4.6 il existe une alternative: mod_remoteip

Tout ce que vous devez faire est:

  1. Peut être vous devez installer le paquet mod_remoteip
  2. Activer le module:

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. Ajoutez ce qui suit à votre config apache httpd. Notez que vous devez ajouter cette ligne pas dans la configuration du serveur proxy. Vous devez ajouter à la configuration du serveur cible proxy httpd (le serveur derrière le proxy):

    RemoteIPHeader X-Forwarded-For
    

Voir http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html pour plus d'informations et plus d'options.

Cela a une explication plus élégante et plus d’une solution possible. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/

L'article décrit comment utiliser un module Apache populaire et un module moins connu pour préserver l'hôte/l'adresse IP dans une configuration impliquant un proxy.

Utilisez le module mod_rpaf, installez-le et activez-le sur le serveur backend et ajoutez les directives suivantes dans la configuration du module.RPAFactiver activé
RPAFsethostname Activé
RPAFproxy_ips 127.0.0.1

(édition 2017) Emplacement actuel de mod_rpaf : https://github.com/gnif/mod_rpaf

Si vous avez la possibilité de le faire, je vous conseille d'utiliser soit mod-jk ou mod-proxy-AJP pour transmettre les demandes d'Apache vers JBoss. Le protocole AJP est beaucoup plus efficace par rapport à l'utilisation de requêtes proxy HTTP et comme un avantage, JBoss verra la demande en provenance du client d'origine et non Apache.

Si vous utilisez proxy inverse Apache pour servir une application en cours d'exécution sur un port localhost vous devez ajouter un emplacement à votre vhost.

<Location />            
   ProxyPass http://localhost:1339/ retry=0
   ProxyPassReverse http://localhost:1339/
   ProxyPreserveHost On
   ProxyErrorOverride Off
</Location>

Pour obtenir l'adresse IP ont des options suivantes

console.log(">>>", req.ip);// this works fine for me returned a valid ip address 
console.log(">>>", req.headers['x-forwarded-for'] );// returned a valid IP address 
console.log(">>>", req.headers['X-Real-IP'] ); // did not work returned undefined 
console.log(">>>", req.connection.remoteAddress );// returned the loopback IP address 

Donc, soit l'utilisation req.ip ou req.headers [ 'x-du renvoi pour']

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top