Pergunta

Estamos usando ProxyPass para redirecionar todas as solicitações "/ r" para o JBoss na porta 18080 da seguinte forma:

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

Mas, isso faz com que o endereço IP registrado no log de acesso do jboss como "127.0.0.1". Será que alguém sabe como podemos preservar o IP original do que o pedido veio em HttpServletRequest? Queremos acesss-lo do pedido servlet jboss em doGet ()

Foi útil?

Solução

Você pode obter o host original de X-Forwarded-For campo de cabeçalho .

Outras dicas

A resposta de JasonW é bom. Mas desde apache httpd 2.4.6 existe uma alternativa: mod_remoteip

Tudo o que você deve fazer é:

  1. Pode ser que você deve instalar o pacote mod_remoteip
  2. Ativar o módulo:

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. Adicione o seguinte ao seu apache httpd configuração. Observe que você deve adicionar esta linha não para a configuração do servidor proxy. Você deve adicionar isso para a configuração do servidor de destino httpd procuração (o servidor atrás do proxy):

    RemoteIPHeader X-Forwarded-For
    

Veja a http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html para mais informações e mais opções.

Isto tem uma explicação mais elegante e mais de soluções possíveis. http://kasunh.wordpress.com/2011 / 10/11 / preservando-remote-ipHost-enquanto-proxy /

O post descreve como usar um popular e um módulos do Apache menos conhecidos para preservar host / ip enquanto em uma configuração envolvendo proxy.

Use o módulo mod_rpaf, instalar e ativá-lo no servidor de back-end e adicionar seguintes diretrizes na configuração do módulo. RPAFenable Em
RPAFsethostname Em
RPAFproxy_ips 127.0.0.1

(2017 edit) localização atual de mod_rpaf: https://github.com/gnif/mod_rpaf

Se você tem a capacidade de fazê-lo, eu recomendaria usando mod-jk ou mod-proxy-AJP para passar solicitações do Apache para JBoss. O protocolo AJP é muito mais eficiente em comparação ao uso HTTP pedidos de proxy e como um benefício, JBoss verá o pedido como provenientes do cliente original e não Apache.

Se você estiver usando Apache proxy reverso para servir um aplicativo executado em uma porta localhost você deve adicionar um local para o seu vhost.

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

Para obter o endereço IP têm as seguintes opções

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 

Assim, ou o uso req.ip ou req.headers [ 'x encaminhadas-para']

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top