La descripción de Wikipedia del encabezado HTTP X-Forwarded-Fores:
X-Forward-For: cliente1, proxy1, proxy2, ...
La documentación de nginx para la directiva real_ip_headerlee, en parte:
Esta directiva establece el nombre del encabezado utilizado para transferir la dirección IP de reemplazo.
En el caso de X-Fordered-For, este módulo utiliza la última ip en el encabezado X-Fordered-For para el reemplazo. [El énfasis es mío]
Estas dos descripciones parecen estar en desacuerdo entre sí. En nuestro escenario, el X-Forwarded-Forencabezado es exactamente como se describe: la dirección IP "real" del cliente es la entrada más a la izquierda. Del mismo modo, el comportamiento de nginx es utilizar el valor más adecuado , que, obviamente, es solo uno de nuestros servidores proxy.
Según tengo entendido X-Real-IP, se supone que debe usarse para determinar la dirección IP del cliente real , no el proxy. ¿Me estoy perdiendo algo o es un error en nginx?
Y, más allá de eso, ¿alguien tiene alguna sugerencia sobre cómo hacer que el X-Real-IPencabezado muestre el valor más a la izquierda , como lo indica la definición de X-Forwarded-For?
fuente

El análisis del
X-Forwarded-Forencabezado es realmente defectuoso en el módulo nginx real_ip.Comienza en el extremo derecho de la cadena del encabezado, y tan pronto como ve un espacio o una coma, deja de buscar y pega la parte a la derecha del espacio o la coma en la variable IP. Por lo tanto, trata la dirección proxy más reciente como la dirección del cliente original .
No está jugando bien según las especificaciones; Este es el peligro de no explicarlo en términos dolorosamente obvios en un RFC.
Aparte: es difícil incluso encontrar una buena fuente primaria en el formato, que fue originalmente definido por Squid: una excavación en su documentación confirma el pedido; el más a la izquierda es el cliente original, el más a la derecha es el anexo más reciente. Estoy muy tentado a agregar una [cita requerida] a esa página de wikipedia. Una edición anónima parece ser la autoridad de Internet sobre el tema.
Si es posible, ¿puede hacer que sus proxies intermedios dejen de agregarse al final del encabezado, dejándolo solo con la dirección real del cliente?
fuente
X-Forwarded-Forya existe un. (es la dirección IP correcta del cliente) nginx se agrega la dirección IP de nuestro equilibrador de carga (el salto anterior) alX-Forwarded-Forencabezado. (presumiblemente agregando lo que ve como la "dirección remota") Si simplemente no hiciera eso, podría usar elX-Forwarded-Forencabezado como antes. (recientemente hemos estado migrando a nginx)proxy_pass- e incluso entonces, solo cuando estáproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;en su lugar.X-Forwarded-Forencabezado con posiblemente la dirección del cliente original a la izquierda y posiblemente cualquier proxy anterior adjunto a eso. Por lo tanto, el proxy actualmente en servicio agregaría el proxy anterior (= iniciador) al final de esa lista y serviría elX-Forwarded-Forencabezado así aumentado al siguiente salto ascendente. Por supuesto, podrían haber elegido una redacción más obvia.X-Real-IP es la dirección IP del cliente real con el que está hablando el servidor (el cliente "real" del servidor), que, en el caso de una conexión proxy, es el servidor proxy. Es por eso que X-Real-IP contendrá la última IP en el encabezado X-Fordered-For.
fuente
X-Real-IPregresaba dirección IP de mi propio servidor proxy cada vez sea útil?