Passando o IP do cliente entre vários proxies

1

Eu tenho um balanceador de carga na frente de um servidor httpd Apache, que por sua vez está na frente de um servidor executando o Tomcat6. Estamos usando o Tomcat para executar o IdP do Shibboleth. O seguinte se parece com isto:

Client -> Load Balancer -> Apache httpd server (mod_proxy_ajp) -> Tomcat server

Estou procurando passar o IP do cliente para o servidor Tomcat. O LB passa a variável ClientIP para o servidor httpd, que eu posso analisar no LogFormat do httpd como "%{ClientIP}i" , mas isso obviamente não chega ao servidor Tomcat, em vez disso, o Tomcat registra o IP do LB.

Eu tentei usar o RemoteIpValve do Tomcat como (em server.xml insider <Engine> ):

> <Valve className="org.apache.catalina.valves.RemoteIpValve"   
> remoteIpHeader="X-Forwarded-For"    protocolHeader="X-Forwarded-Proto"
> protocolHeaderHttpsValue="https" />

esperando que o uso de mod_proxy passasse o IP em X-Forwarded-For sem sucesso. Já vi postagens em mod_rpaf , mas espero fazer isso sem mais mods httpd do apache.

Eu acho que estou a alguns pedaços de amarrar tudo isso junto, mas preso em uma rotina. Alguma ideia?

    
por KM. 14.06.2013 / 03:56

1 resposta

1

Se o balanceador de carga estiver inserindo o endereço IP do cliente em um cabeçalho chamado ClientIP, mod_proxy deverá transmiti-lo para o servidor Tomcat sem nenhuma configuração especial. Tente configurar o Tomcat RemoteIpValve para procurar ClientIP em vez de X-Forwarded-For . por exemplo,

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
       remoteIpHeader="ClientIP"
       protocolHeaderHttpsValue="https" />
    
por 14.06.2013 / 14:18