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 sous le nom "127.0.0.1". Est-ce que quelqu'un sait comment pouvons-nous conserver l'adresse IP d'origine d'où la demande est venue dans HttpServletRequest? Nous voulons accéder à la requête de servlet de jboss dans doGet ()
Vous pouvez obtenir l'hôte d'origine à partir du champ X-Forwarded-For header.
La réponse de JasonW est bien. Mais depuis Apache httpd 2.4.6, il existe une alternative: mod_remoteip
Tout ce que vous devez faire c'est:
Activer le module:
LoadModule remoteip_module modules/mod_remoteip.so
Ajoutez ce qui suit à votre configuration Apache httpd. Notez que vous devez ajouter cette ligne not à la configuration du serveur proxy. Vous devez ajouter ceci à la configuration du serveur proxy cible 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/
Cet article explique comment utiliser un module Apache populaire et un module moins connu pour préserver Host/ip dans une configuration impliquant un proxy.
Utilisez le module mod_rpaf, installez-le, activez-le sur le serveur principal et ajoutez les directives suivantes dans la configuration du module . RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
(2017 edit) Emplacement actuel de mod_rpaf: https://github.com/gnif/mod_rpaf
Si vous en avez la possibilité, je vous recommanderais d'utiliser mod-jk ou mod-proxy-ajp pour transmettre les requêtes d'Apache à JBoss. Le protocole AJP est beaucoup plus efficace que l'utilisation de demandes de proxy HTTP. JBoss considérera que la demande provient du client d'origine et non d'Apache.
Si vous utilisez le proxy inverse Apache pour desservir une application exécutée 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 les 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 utilisez soit req.ip, soit req.headers ['x-forwarded-for']