Domanda

Stiamo usando ProxyPass per reindirizzare tutti "/ r" richieste a JBoss sulla porta 18080 nel seguente modo:

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

Ma, che provoca l'indirizzo IP registrato nel log di accesso di JBoss come "127.0.0.1". C'è qualcuno che sa come possiamo preservare la IP originale da cui la richiesta è venuto in HttpServletRequest? Vogliamo acesss dalla richiesta servlet JBoss in doGet ()

È stato utile?

Soluzione

È possibile ottenere l'host originale da X-Forwarded-For campo di intestazione .

Altri suggerimenti

La risposta di JasonW va bene. Ma dal momento che apache httpd 2.4.6 c'è un'alternativa: mod_remoteip

Tutto ciò che dovete fare è:

  1. Può essere è necessario installare il pacchetto mod_remoteip
  2. Attiva il modulo:

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. Aggiungere la seguente al vostro configurazione di Apache httpd. Si noti che è necessario aggiungere questa riga non nella configurazione del server proxy. È necessario aggiungere questo alla configurazione del server proxy di destinazione httpd (il server dietro il proxy):

    RemoteIPHeader X-Forwarded-For
    

http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html per maggiori informazioni e più opzioni.

Questo ha una spiegazione più elegante e più di un possibili soluzioni. http://kasunh.wordpress.com/2011 / 10/11 / preservando-remote-IPHost-while-proxy /

Il post descrive come utilizzare uno popolare e uno meno noti moduli Apache preservare host / ip mentre in una configurazione che coinvolge proxy.

  

Utilizza il modulo mod_rpaf, installare e attivare nel server back-end e aggiungere seguenti direttive di configurazione del modulo.   RPAFenable On
  RPAFsethostname On
  RPAFproxy_ips 127.0.0.1

(2017 edit) posizione attuale di mod_rpaf: https://github.com/gnif/mod_rpaf

Se avete la possibilità di farlo, mi consiglia di utilizzare entrambi i mod-jk o mod-proxy-AJP per passare le richieste da Apache a JBoss. Il protocollo di AJP è molto più efficiente rispetto all'utilizzo di richieste proxy HTTP e come un beneficio, JBoss vedrà la richiesta come proveniente dal client originale e non Apache.

Se si utilizza Apache proxy inverso per servire un app in esecuzione su una porta localhost è necessario aggiungere una posizione per il vostro vhost.

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

Per ottenere l'indirizzo IP hanno seguenti opzioni

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 

Quindi, o l'uso req.ip o req.headers [ 'x-inoltrato-for']

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top