apache ProxyPass: comment préserver l'adresse IP d'origine
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". Quelqu'un sait-il comment préserver l'adresse IP d'où provient la requête dans HttpServletRequest? Nous voulons accéder à la requête servlet de jboss dans doGet ()
5 réponses
Vous pouvez obtenir de l'hôte d'origine à partir 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 existe une alternative: mod_remoteip
Tout ce que vous devez faire c'est:
- Peut-être que vous devez installer le mod_remoteip paquet
Activer le module:
LoadModule remoteip_module modules/mod_remoteip.so
ajouter ce qui suit à votre configuration apache httpd. Notez que vous devez ajouter cette ligne dans la configuration du serveur proxy. Vous devez vous ajouter ceci à la configuration du serveur httpd cible par procuration (le serveur derrière le proxy):
RemoteIPHeader X-Forwarded-For
ceci a une explication plus élégante et plus d'une solution possible. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/
le post décrit comment utiliser un populaire et un moins connu modules Apache pour préserver l'hôte / ip dans une configuration impliquant le proxy.
utiliser le module mod_rpaf, l'installer et l'activer dans le serveur d'arrière-plan et ajouter les directives suivantes dans la configuration du module. RPAFenable
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
(2017 edit) emplacement actuel de mod_rpaf:https://github.com/gnif/mod_rpaf
Si vous avez la capacité de le faire, je vous conseille d'utiliser mod-jk ou mod-proxy-ajp transmettre les requêtes D'Apache à JBoss. Le protocole AJP est beaucoup plus efficace que les requêtes proxy HTTP et comme avantage, JBoss considérera que la requête provient du client d'origine et non D'Apache.
si vous utilisez Apache reverse proxy pour servir une application tournant sur un port localhost, vous devez ajouter un emplacement à votre serveur virtuel.
<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
Utilisez donc req.ip ou req.les en-têtes ["x-forwarded-for']