
Tengo un conjunto de servidores Nginx detrás de un equilibrador de carga de Amazon ELB. Estoy usando set_real_ip (delMódulo HttpRealIp) para poder acceder a la dirección IP del cliente de origen en estos servidores (para pasar a php-fpm y para usar en elMódulo HttpGeoIP).
Parece que set_real_ip_from
en la configuración de nginx solo se puede aceptar una dirección IP. Sin embargo, con respecto a las máquinas ELB, Amazon dice:
Nota: Debido a que el conjunto de direcciones IP asociadas con un LoadBalancer puede cambiar con el tiempo, nunca debe crear un registro "A" con una dirección IP específica. Si desea utilizar un nombre DNS descriptivo para su LoadBalancer en lugar del nombre generado por el servicio Elastic Load Balancing, debe crear un registro CNAME para el nombre DNS de LoadBalancer o usar Amazon Route 53 para crear una zona hospedada. Para obtener más información, consulte Uso de nombres de dominio con Elastic Load Balancing.
Pero si necesito ingresar una dirección IP, no puedo usar un CNAME (ni el de Amazon ni el mío). ¿Hay una solución a este problema?
Respuesta1
Si puede garantizar que todas las solicitudes provendrán de ELB (no estoy familiarizado con él), puede intentar:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
Eso debería indicarle a nginx que confíe en un encabezado X-Forwarded-For de cualquier persona. La desventaja es que si alguien accede directamente a su servidor, podrá falsificar un encabezado X-Forwarded-For y nginx usará la dirección IP del cliente incorrecta.
Respuesta2
La mejor práctica actual es utilizar VPC, de modo que sabrá el CIDR exacto para su ELB. Luego, puedes agregar algo como esto a tu archivo de configuración de Nginx:
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
Respuesta3
Utilice el CIDR de VPC para. set_real_ip_from
Puede encontrarlo en la consola de Amazon en VPC => Su VPC (reemplácelo <your VPC CIDR here>
con él):
real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;
Respuesta4
Establecer el rango de confianza en 0.0.0.0/0 en Amazon ELB seguramente le causará problemas. Puede garantizar que las solicitudes provengan del ELB si puede configurar el grupo de seguridad para su servidor nginx, pero eloriginalLa solicitud se originará desde cualquier fuente posible (los ELB de Amazon son interfaces públicas).
Una prueba sencilla revelará esto:
curl --header "X-Forwarded-For: 1.2.3.4" "http://your-elb-dns-address/"
Los registros de su servidor nginx mostrarán 1.2.3.4 como la IP real, que es falsa. VerRango de IP para IP privada interna de Amazon ELBpara mejores respuestas.