Cómo registrar el valor original de $ remote_addr cuando se usa Real-IP

9

Mi entorno tiene solicitudes de usuario que pasan por varios sistemas:

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

(ELB = AWS Elastic Load Balancer)

Gracias a esta respuesta , tengo nginx determinando y pasando la dirección IP correcta del cliente a los servidores ascendentes (web) con los encabezados X-Forwarded-Fory X-Real_IP. La configuración de 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;

Mi problema es este, el módulo Real IP en nginx reemplaza la $remote_addrvariable existente con el resultado de sus X-Forwarded-Forcálculos. Esto me da la IP del cliente de origen, pero estoy perdiendo la dirección IP del sistema que realmente envió la solicitud al proxy (es decir, el ELB).

En general, tener la IP del cliente es más importante para mí, pero me gustaría poder registrar la cadena completa de solicitudes para poder entender (y depurar) cómo fluye el tráfico. Actualmente, solo puedo hacer que nginx registre la IP del cliente, su propia IP y la IP del servidor ascendente. Me gustaría poder registrar el IP de ELB también.

Veo que X-Istence hizo la misma pregunta en 2013, con poca suerte. ¿Ha cambiado o mejorado algo desde entonces?

michaelg
fuente

Respuestas:

8

Puede obtener la dirección del cliente original del ELB de conexión en la variable$realip_remote_addr , pero tenga en cuenta que esta variable solo se agregó en nginx 1.9.7, por lo que deberá ejecutar una versión muy reciente de nginx.

Michael Hampton
fuente
Gracias @Michael Hampton ♦! Regresaba para responder mi propia pregunta porque después de seguir una estrategia alternativa, finalmente me topé $realip_remote_addr. Funciona muy bien En realidad estaba tratando de hacer que proxy_protocol funcionara y encontré las notas del parche nginx para 1.9.7
michaelg