Como registrar o valor original de $ remote_addr ao usar o Real-IP

9

Meu ambiente possui solicitações de usuário passando por vários sistemas:

[Cliente] -> [ELB] ---> [nginx] -> [web]

(ELB = AWS Elastic Load Balancer)

Graças a esta resposta , tenho nginx determinação e passando o endereço IP do cliente correto para os servidores a montante (web) com o X-Forwarded-Fore X-Real_IPcabeçalhos. A configuração nginx relevante:

    real_ip_header      X-Forwarded-For;
    set_real_ip_from        10.0.0.0/8;
    real_ip_recursive   on;
    proxy_set_header X-Real-IP $remote_addr;

Meu problema é esse, o módulo IP real no nginx substitui a $remote_addrvariável existente pelo resultado de seus X-Forwarded-Forcálculos. Isso me dá o IP do cliente de origem, mas estou perdendo o endereço IP do sistema que realmente enviou a solicitação ao proxy (ou seja, o ELB).

No geral, ter o IP do cliente é mais importante para mim, mas eu gostaria de poder registrar toda a cadeia de solicitações para entender (e depurar) como o tráfego está fluindo. Atualmente, só posso ter o nginx registrando o IP do cliente, seu próprio IP e o IP do servidor upstream. Gostaria de poder registrar o IP do ELB também.

Vejo X-Istence fez a mesma pergunta em 2013, com pouca sorte. Alguma coisa mudou ou melhorou desde então?

michaelg
fonte

Respostas:

8

Você pode obter o endereço do cliente original do ELB de conexão na variável$realip_remote_addr , mas lembre-se de que essa variável foi adicionada apenas no nginx 1.9.7, portanto, você precisará estar executando uma versão muito recente do nginx.

Michael Hampton
fonte
Obrigado @ Michael Hampton ♦! Eu estava voltando para responder minha própria pergunta, porque depois de seguir uma estratégia alternativa, finalmente me deparei $realip_remote_addr. Funciona lindamente. Estava realmente tentando obter proxy_protocol ao trabalho e veio sobre as notas de patch nginx para 1.9.7
michaelg