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

9

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

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

(ELB = Balanceador de carga elástico da AWS)

Graças a essa resposta , eu tenho o nginx determinando e passando o endereço IP do cliente correto para os servidores upstream (web) com os cabeçalhos X-Forwarded-For e X-Real_IP . A configuração relevante do nginx:

    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 é que o módulo IP Real em nginx substitui a variável $remote_addr existente com o resultado de seus cálculos X-Forwarded-For . 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 gostaria de poder registrar a cadeia completa de solicitações para que eu possa entender (e depurar) como o tráfego está fluindo. Atualmente, só posso ter o log nginx do IP do cliente, seu próprio IP e o IP do servidor upstream. Eu gostaria de poder registrar o IP do ELB também.

Eu vejo X-Istence pediu o mesmo pergunta em 2013, com pouca sorte. Alguma coisa mudou ou melhorou desde então?

    
por michaelg 19.12.2015 / 06:24

1 resposta

8

Você pode obter o endereço do cliente original do ELB de conexão em a variável $realip_remote_addr , mas esteja ciente de que esta variável foi adicionada somente no nginx 1.9.7, então você precisa estar rodando uma versão muito recente do nginx.

    
por 19.12.2015 / 06:28