nginx com real_ip - registra tanto o cliente remote_addr quanto o endereço de proxies

6

Eu tenho uma instância nginx configurada atrás de vários proxies de balanceamento de carga, e estou usando real_ip para obter o endereço IP do cliente em remote_addr para processamento pelo meu aplicativo Python.

No entanto, em meus registros, gostaria de registrar o servidor proxy que realmente fez a solicitação, mas $remote_addr foi substituído, e não consigo encontrar nada que diga que uma cópia foi feita.

Como eu poderia conseguir isso?

    
por X-Istence 10.03.2013 / 00:38

3 respostas

5

Sua configuração pode ter mudado desde que você postou esta pergunta, mas eu tive o mesmo problema e finalmente há uma solução disponível. Vou postar aqui caso o Google leve alguém para esta página.

Como @Michael Hampton ♦ indica em sua resposta para minha própria versão desta questão, o nginx adicionou a variável $realip_remote_addr ao Módulo Real_IP . Ele contém o valor original de $remote_addr , permitindo que você use / log tanto o IP do cliente de origem quanto o IP do servidor que enviou a solicitação real para nginx. Isso foi adicionado à versão 1.9.7, a partir de novembro de 2015.

    
por 19.12.2015 / 08:10
0

O próprio módulo parece não suportar isso. No entanto, os proxies reversos (para os quais o real_ip é usado principalmente) podem fornecer um campo de cabeçalho HTTP contendo o endereço IP dos proxies.

Infelizmente, você não pode verificar se o endereço foi regravado ou não, portanto, um cliente que não se conecta por meio de um proxy habilitado para real_ip pode forjar o campo de cabeçalho.

Verifique o documento do seu proxy, talvez você possa usar um campo de cabeçalho HTTP para o endereço IP.

    
por 10.03.2013 / 00:53
0

Não adquira realmente se você quiser logar no lado de nginx ou dentro de sua aplicação >

Para o lado nginx, você pode usar $ http_x_forwarded_for na definição nginx log_format, algo assim:

log_format  main  '$remote_addr - $remote_user [$time_local] [$msec] [$request_time] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
    
por 11.03.2013 / 12:18