Mostrar la verdadera IP de un cliente

Walter Sufan
22 de Enero del 2020

Buenas tardes. Los molesto con una pregunta que seguro para ustedes es muy basica. No puedo hacer que mi servifor proxy reverso NGINX no enmascare la ip de los clientes que se conectan. Lo necesito para que el servidor al cuel estoy apuntando y certificando puedo realizar un filtrado por IP.

Ya he tratado de varias formas tanto en el archivo nginx.conf como en el archivo del propio sitio al cual apunto. Todo a traves del modulo http_realip_module. Tengo la version nginx/1.10.3 en un ubuntu server 16.04.

 

Desde ya muchas gracias por cualquier ayuda.


David Carrero
12 de Agosto del 2026

Con http_realip_module el problema más habitual, y probablemente el tuyo, es que el módulo solo confía en la IP de origen si viene de una dirección que hayas declarado explícitamente como proxy de confianza con set_real_ip_from. Si no lo configuras, Nginx ignora la cabecera aunque el módulo esté cargado.

La configuración típica dentro del bloque server (o http si quieres que aplique a todos los sitios) sería:

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8; # la IP/rango de tu proxy o balanceador, no la del cliente
real_ip_recursive on;

set_real_ip_from es la parte que casi siempre se olvida: es obligatorio decirle a Nginx desde qué IP confía la cabecera X-Forwarded-For, si no, cualquier cliente podría falsificarla y Nginx lo estaría aceptando ciegamente. real_ip_recursive on es importante si tienes más de un salto de proxy delante (por ejemplo Cloudflare + tu propio balanceador), para que busque la IP real recursivamente en la cadena en vez de quedarse con la primera de la lista.

Un par de cosas a verificar si sigue sin funcionar tras esto:

1. Que el módulo ngx_http_realip_module esté realmente compilado en tu build de Nginx (nginx -V | grep -o with-http_realip_module).
2. Que estas directivas estén en el bloque correcto (dentro de server, no fuera, o no se aplicarán a ese vhost).
3. Después de aplicar esto, $remote_addr ya debería contener la IP real, y es esa variable la que debes usar en tu filtrado por IP, no $http_x_forwarded_for directamente.

David