apache ProxyPass: comment préserver l'adresse IP d'origine
Nous sommes à l'aide de la directive ProxyPass pour rediriger toutes les "/r" demandes de jboss sur le port 18080 comme suit:
ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/
Mais, qui provoque l'adresse IP enregistré dans jboss l'accès des journaux comme "127.0.0.1". Est-ce que qqn sait comment pouvons-nous préserver l'IP d'origine d'où la demande est venu dans HttpServletRequest? Nous voulons acesss de jboss servlet demande dans doGet()
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir de l'hôte d'origine de X-Forwarded-For champ d'en-tête.
La réponse de JasonW est très bien. Mais depuis apache httpd 2.4.6 il y a une alternative: mod_remoteip
Tout ce que vous devez faire est de:
Activer le module:
Ajouter les éléments suivants à votre config d'apache httpd. Notez que vous devez ajouter cette ligne pas dans la configuration du serveur proxy. Vous devez ajouter à la configuration de la cible de proxy serveur httpd (le serveur derrière le proxy):
Voir à http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html pour plus d'informations et plus d'options.
C'est plus élégant d'explication et de plus d'une des solutions possibles. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/
Le poste décrit comment utiliser l'un populaire et l'un des moins connus des modules Apache pour préserver l'hôte/ip, tandis que dans une installation impliquant l'utilisation de proxy.
(2017 edit) de l'emplacement Actuel de mod_rpaf: https://github.com/gnif/mod_rpaf
Si vous avez la capacité de le faire, je vous conseille d'utiliser soit mod-jk ou mod-proxy-ajp de transmettre les demandes d'Apache pour JBoss. Le protocole AJP est beaucoup plus efficace par rapport à l'utilisation de proxy HTTP demandes et comme un avantage, JBoss verrez la demande en provenance du client d'origine et pas Apache.
Si vous utilisez Apache en reverse proxy pour servir une application qui s'exécute sur un port local, vous devez ajouter un emplacement pour votre serveur virtuel.
Pour obtenir l'adresse IP ont des options suivantes
Donc soit utiliser req.ip ou req.les en-têtes ["x-forwarded-for']