
Tenho um conjunto de servidores Nginx atrás de um balanceador de carga Amazon ELB. Estou usando set_real_ip (doMódulo HttpRealIp) para que eu possa acessar o endereço IP do cliente de origem nesses servidores (para passar para php-fpm e para usar noMódulo HttpGeoIP).
Parece que set_real_ip_from
na configuração do nginx só pode aceitar um endereço IP. No entanto, no que diz respeito às máquinas ELB, a Amazon diz:
Observação: como o conjunto de endereços IP associados a um LoadBalancer pode mudar com o tempo, você nunca deve criar um registro "A" com qualquer endereço IP específico. Se quiser usar um nome DNS amigável para seu LoadBalancer em vez do nome gerado pelo serviço Elastic Load Balancing, você deverá criar um registro CNAME para o nome DNS do LoadBalancer ou usar o Amazon Route 53 para criar uma zona hospedada. Para obter mais informações, consulte Uso de nomes de domínio com Elastic Load Balancing
Mas se eu precisar inserir um endereço IP, não posso usar um CNAME (da Amazon ou meu). Existe uma solução para este problema?
Responder1
Se você puder garantir que todas as solicitações virão do ELB (não estou familiarizado com isso), tente:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
Isso deve dizer ao nginx para confiar em um cabeçalho X-Forwarded-For de qualquer pessoa. A desvantagem é que, se alguém acessar diretamente o seu servidor, poderá falsificar um cabeçalho X-Forwarded-For e o nginx usará o endereço IP do cliente errado.
Responder2
A prática recomendada hoje é usar VPC, assim você saberá o CIDR exato para seu ELB. Então, você pode adicionar algo assim ao seu arquivo de configuração Nginx:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
Responder3
Use o VPC CIDR para set_real_ip_from
Você pode encontrá-lo no console da Amazon em VPC => Seu VPC (substitua <your VPC CIDR here>
por ele):
real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;
Responder4
Definir o intervalo confiável para 0.0.0.0/0 no Amazon ELB certamente causará problemas. Você pode garantir que as solicitações vêm do ELB se puder configurar o grupo de segurança para o seu servidor nginx, mas ooriginala solicitação será originada de qualquer fonte possível (os Amazon ELBs são interfaces públicas).
Um teste simples irá revelar isso:
curl --header "X-Forwarded-For: 1.2.3.4" "http://your-elb-dns-address/"
Os logs no seu servidor nginx mostrarão 1.2.3.4 como o IP real, que é falsificado. VerFaixa de IP para IP privado interno do Amazon ELBpara melhores respostas.