Faça o Tomcat usar o X-Real-IP

5

Estou configurando o nginx como um proxy reverso na frente do Tomcat 7. Adicionei as seguintes linhas à configuração do nginx:

set_real_ip_from 127.0.0.1;
...
location / {
    proxy_pass http://tomcat;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Mas ainda assim, vejo nos registros do Tomcat a seguinte imagem:

127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=6C1B02376C5F748C509B28FC7CE416C9 HTTP/1.0" 200 10571
127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=0BBE0174C1F0E94FDF49610144E809D3 HTTP/1.0" 200 10571
127.0.0.1 - - [10/Jun/2013:11:25:48 +0600] "GET /app/welcome;jsessionid=AD48005AD453F3A0BE46F1AC978F145D HTTP/1.0" 200 10571

Existe alguma maneira de forçar o Tomcat a usar o cabeçalho X-Real-IP (e gravá-lo em arquivos de log) sem modificar o aplicativo da Web ?

    
por Kerb 10.06.2013 / 07:33

5 respostas

11

É necessário adicionar a Valve na configuração do Tomcat:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
               remoteIpHeader="X-Forwarded-For"
               requestAttributesEnabled="true"
               internalProxies="127\.0\.0\.1"  />

Depois disso, o Tomcat começa a enviar cabeçalhos enviados do nginx:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
por 17.05.2015 / 16:43
3

Encontrou esta questão através do google e pretende adicionar comentários à resposta aprovada:

De acordo com a documentação , por padrão, esta válvula (RemoteIpValve) não tem efeito sobre os valores que são gravados no log de acesso. Para obter IPs reais no log, você deve adicionar

requestAttributesEnabled="true"

para AccessLogValve também.

    
por 07.12.2015 / 18:51
1

Eu estava procurando a mesma coisa e encontrei informações que me levaram à seguinte solução, pesquisando na rede.

No seu tomcat server.xml , você precisa editar o padrão da válvula de registro para obter os valores do cabeçalho de entrada.

Na sua

e altere o padrão para:

pattern="Remote User[ %{X-Forwarded-For}i %l %u %t ] Request[ &quot;%r&quot; ] Status Code[ %s ] Bytes[ %b ] Referer[ &quot;%{Referer}i&quot; ] Agent[ &quot;%{User-agent}i&quot; ] "

Meu valor de log de acesso completo é semelhante ao seguinte:

      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="access_log." suffix=".txt"
               pattern="Remote User[ %{X-Forwarded-For}i %l %u %t ] Request[ &quot;%r&quot; ] 
               Status Code[ %s ] Bytes[ %b ] Referer[ &quot;%{Referer}i&quot; ] 
               Agent[ &quot;%{User-agent}i&quot; ] " />

Isto é acompanhado pela configuração do Nginx de:

location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_intercept_errors on;
}

Informações adicionais sobre padrões de válvulas de log no Tomcat podem ser encontradas em: Apache 7: The Componente de Válvula

    
por 02.08.2014 / 03:23
0

Você precisará instalar o mod_realip link ( link ) ou mod_rpaf no servidor apache.

    
por 10.06.2013 / 10:43
0

Outro exemplo útil de configuração do Tomcat: internalProxies pode ser separado por pipeline (|), pois aceita a expressão regular.

<Valve
   className="org.apache.catalina.valves.RemoteIpValve"
   internalProxies="192\.168\.10\.110|127\.0\.0\.1"
   remoteIpHeader="x-forwarded-for"
   proxiesHeader="x-forwarded-by"
   protocolHeader="x-forwarded-proto"
   />

Para mais exemplos, consulte o documento do tomcat

    
por 30.01.2018 / 18:08

Tags