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 ()

33
demandé sur ashweta 2009-04-17 16:50:44

5 réponses

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

26
répondu andri 2009-04-17 12:54:45

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:

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

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. 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
    
http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html pour plus d'informations et plus d'options.

24
répondu Steffen 2015-06-11 14:51:52

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

12
répondu JasonW 2017-10-30 21:22:20

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.

9
répondu Jason Fritcher 2009-04-17 21:41:02

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']

0
répondu Tarun Gupta 2018-01-16 07:00:18