DICCIONARIO · X

X-Forwarded-For

X-Forwarded-For (XFF) es una cabecera HTTP de petición que añaden los proxies, balanceadores de carga y CDN para indicar al servidor la dirección IP del cliente original y de cada intermediario. Sin ella, el servidor solo vería la IP del último proxy. Es un estándar de facto: la versión normalizada es la cabecera Forwarded (RFC 7239).

Germán Gutiérrez Escrito por Germán Gutiérrez 7 min de lectura
Ficha rápida
Tipo
Cabecera HTTP de petición (request header), no estándar
Origen
Introducida por los desarrolladores del proxy caché Squid
Sintaxis
X-Forwarded-For: cliente, proxy1, proxy2
Versión estándar
Cabecera Forwarded, RFC 7239 (IETF, junio de 2014)
Cabeceras hermanas
X-Forwarded-Proto, X-Forwarded-Host, X-Real-IP

≡En resumen

  • X-Forwarded-For transporta la IP del cliente original cuando la petición atraviesa proxies, balanceadores o una CDN.
  • Cada proxy añade al final de la lista la IP de quien le ha conectado: la primera es el cliente y la última, el proxy más reciente.
  • El cliente puede escribir lo que quiera en la cabecera, así que solo son fiables las IP añadidas por tus propios proxies.
  • Para usos de seguridad (bloqueos, límites de peticiones) lee la lista desde la derecha y salta los proxies de confianza.
  • La cabecera estandarizada es Forwarded (RFC 7239), pero X-Forwarded-For sigue siendo mucho más usada.

01 ¿Qué es X-Forwarded-For?

La cabecera la crearon los desarrolladores de Squid, un proxy caché muy extendido en los años noventa y dos mil. Nunca llegó a ser un estándar oficial: el prefijo X- se usaba para cabeceras experimentales o propietarias. Aun así, la adoptaron casi todos los proxies, servidores y CDN, y hoy es un estándar de facto. En junio de 2014 el IETF publicó el RFC 7239, que define la cabecera Forwarded como versión normalizada.

Cuando la gente busca «x forwarded» suele referirse a esta cabecera o a su familia: X-Forwarded-For para la IP, X-Forwarded-Proto para el protocolo y X-Forwarded-Host para el dominio original.

02 ¿Para qué sirve la cabecera X-Forwarded-For?

Cuando hay un intermediario, la conexión TCP que ve tu servidor es la del proxy, no la del visitante. Sin XFF, todos los registros mostrarían la misma IP, la de tu balanceador o tu CDN. La cabecera sirve para recuperar ese dato en tareas como estas:

01

Logs y analítica

Registrar la IP real de cada visita en los logs de acceso en lugar de la del proxy.

02

Seguridad

Limitar peticiones por IP, bloquear atacantes o aplicar listas de acceso tras un balanceador.

03

Geolocalización

Mostrar idioma, moneda o contenido según el país del visitante.

04

Depuración

Seguir el recorrido de una petición a través de varios proxies para localizar un fallo.

05

Análisis SEO de logs

Distinguir las visitas reales de Googlebot de los bots que se hacen pasar por él, comprobando la IP de origen.

03 Sintaxis de X-Forwarded-For y ejemplos

La cabecera contiene una lista de IP separadas por comas. Según la documentación de MDN, la IP más a la izquierda es la del cliente original y la más a la derecha, la del proxy más reciente, siempre que el cliente y los proxies se comporten correctamente. Cada proxy añade al final la IP desde la que recibió la conexión; no la pone al principio.

Ejemplo · Una petición que atraviesa dos proxies

X-Forwarded-For: 203.0.113.195, 2001:db8:85a3:8d3:1319:8a2e:370:7348, 198.51.100.178

El cliente es 203.0.113.195. El primer proxy tiene la IPv6 2001:db8:85a3:8d3:1319:8a2e:370:7348 y el último, 198.51.100.178. La IP del proxy que conecta directamente con tu servidor no aparece en la cabecera: la ves como dirección remota de la conexión.

Salto Quién conecta Valor de X-Forwarded-For que se envía
1 Navegador (203.0.113.195) → CDN Sin cabecera (o lo que el cliente haya inventado)
2 CDN (198.51.100.10) → balanceador 203.0.113.195
3 Balanceador (10.0.0.5) → servidor web 203.0.113.195, 198.51.100.10
4 El servidor lee la conexión Dirección remota: 10.0.0.5
Cómo crece la cabecera en cada salto

04 Cómo obtener la IP real del cliente de forma segura

Cualquiera puede enviar una cabecera X-Forwarded-For falsa desde su navegador o con un script. Tu proxy no la borra: añade su dato al final. Por eso la primera IP de la lista no es de fiar. MDN distingue dos casos:

Uso Qué IP tomar ¿Es fiable?
Estadísticas, idioma, personalización La primera IP válida y pública empezando por la izquierda No: puede estar falsificada
Seguridad con número de proxies conocido Contar desde la derecha tantas posiciones como proxies tengas menos una Sí, si todos los proxies son tuyos
Seguridad con lista de proxies de confianza Recorrer desde la derecha saltando las IP de tus proxies; la primera que no esté en la lista Sí
Qué IP usar según el propósito
  • ✓Nunca uses la IP más a la izquierda para bloquear, limitar peticiones o dar acceso.
  • ✓Configura en tu servidor o framework la lista de proxies de confianza.
  • ✓Valida que cada valor sea una IP real: los valores falsificados pueden ser texto cualquiera.
  • ✓Descarta IP privadas (10.x, 192.168.x, 172.16-31.x) al buscar la IP pública del cliente.
  • ✓Recuerda que la IP es un dato personal: trátala conforme al RGPD en tus logs.

05 Configurar X-Forwarded-For en Nginx, Apache, Laravel y Cloudflare

  1. 1

    Nginx como proxy inverso

    Reenvía la cabecera con proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; esta variable añade la IP del cliente a la cabecera recibida.

  2. 2

    Nginx como servidor final

    Con el módulo ngx_http_realip_module usa set_real_ip_from con las IP de tus proxies, real_ip_header X-Forwarded-For y real_ip_recursive on para tomar la última IP que no sea de confianza. El módulo no se compila por defecto.

  3. 3

    Apache

    El módulo mod_remoteip sustituye la IP remota con RemoteIPHeader X-Forwarded-For y RemoteIPTrustedProxy o RemoteIPInternalProxy para declarar los proxies fiables.

  4. 4

    Laravel

    Declara los proxies con trustProxies en bootstrap/app.php; después, $request->ip() devuelve la IP del cliente calculada con esa lista.

  5. 5

    Cloudflare y balanceadores cloud

    Cloudflare añade X-Forwarded-For y su propia cabecera CF-Connecting-IP; los balanceadores de AWS o Google Cloud también añaden la IP del cliente al final de la lista.

En proyectos de desarrollo de aplicaciones web a medida este ajuste se olvida con frecuencia: el resultado son logs con una sola IP, límites de peticiones que bloquean a todos los usuarios a la vez o formularios antispam que no funcionan. Si además sirves la web con una CDN para la optimización de la velocidad web, revisa la configuración antes de publicar.

06 X-Forwarded-For vs. Forwarded vs. X-Real-IP

Cabecera Qué transmite Estándar Ejemplo
X-Forwarded-For IP del cliente y de cada proxy De facto (Squid) X-Forwarded-For: 192.0.2.60, 198.51.100.17
Forwarded IP (for), proxy (by), host y protocolo en una sola cabecera RFC 7239 (2014) Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
X-Real-IP Una sola IP: la del cliente según el proxy De facto (habitual en Nginx) X-Real-IP: 192.0.2.60
X-Forwarded-Proto Protocolo original (http o https) De facto X-Forwarded-Proto: https
X-Forwarded-Host Dominio que pidió el cliente De facto X-Forwarded-Host: www.ejemplo.com
Cabeceras para transmitir datos del cliente original

El RFC 7239, firmado por Andreas Petersson y Martin Nilsson, reconoce que la forma habitual de dar esta información son cabeceras no estándar como X-Forwarded-For, X-Forwarded-By y X-Forwarded-Proto, y propone Forwarded para unificarlas. En la práctica, MDN señala que Forwarded se usa mucho menos. X-Forwarded-Proto es clave para que una aplicación detrás de un proxy sepa que la visita llegó por HTTPS y no genere redirecciones infinitas.

07 Riesgos de seguridad y privacidad de X-Forwarded-For

01

Suplantación de IP

Un atacante envía una IP falsa en la cabecera para saltarse un bloqueo o hacerse pasar por una IP permitida.

02

Evitar límites de peticiones

Si el rate limiting usa la primera IP, basta con cambiarla en cada petición para no ser bloqueado nunca.

03

Inyección en logs

Valores que no son IP pueden romper el análisis de logs o colar datos maliciosos en paneles de administración.

04

Exposición de datos

La cabecera revela IP internas y la del usuario a cada servidor de la cadena, algo a tener en cuenta en privacidad.

Preguntas frecuentes sobre X-Forwarded-For

Es una cabecera HTTP que añaden los proxies, balanceadores y CDN para indicar la IP del cliente original y de los intermediarios por los que pasa una petición.

«Forwarded» significa reenviado. Las cabeceras X-Forwarded-* informan de datos de la petición original que se pierden al reenviarla: la IP (For), el protocolo (Proto) o el dominio (Host).

La primera IP de la izquierda es la que dice ser el cliente, pero puede estar falsificada. Para usos de seguridad toma la IP añadida por tu primer proxy de confianza, leyendo la lista desde la derecha.

Sí. El cliente puede enviar la cabecera con cualquier valor y los proxies solo añaden datos al final. Solo son fiables las IP que añaden proxies que controlas.

Forwarded es la versión estandarizada en el RFC 7239 de 2014 y agrupa IP, proxy, host y protocolo en una cabecera. X-Forwarded-For es anterior, no estándar y mucho más usada.

X-Forwarded-For es una lista con el cliente y todos los proxies; X-Real-IP contiene una única IP, la que el proxy considera del cliente.

Sí. Contiene direcciones IP, que en la Unión Europea se consideran datos personales, así que su registro y conservación deben cumplir el RGPD.

Fuentes consultadas

Germán Gutiérrez

Sobre el autor

Germán Gutiérrez

Development Manager en appyweb

Dirige el equipo de desarrollo de appyweb: aplicaciones web y móviles, SaaS, integraciones y arquitectura de software.

Ver perfil en LinkedIn ↗

Términos relacionados

Ver todos los términos →
I IP Una dirección IP (de Internet Protocol) es el identificador numérico que se asigna a cada dispositivo o interfaz conectado a una red que usa el protocolo IP, para que los datos sepan de dónde salen y adónde van. Hay dos versiones, IPv4 e IPv6, y cada dirección puede ser pública o privada, fija o dinámica. H Header Un header (en español, cabecera o encabezado) es la parte inicial de una página, documento o mensaje que lo identifica y orienta antes del contenido principal. En diseño web es la franja superior con el logo y el menú; en HTML, la etiqueta header; y en HTTP o email, los datos técnicos que acompañan a cada petición o mensaje. A Análisis de cabecera HTTP del servidor El análisis de cabecera HTTP del servidor es la revisión de la línea de estado y las cabeceras que devuelve un servidor cuando se le pide una URL, para comprobar redirecciones, indexación, caché y seguridad. Importa porque detecta problemas invisibles en el navegador que frenan el rastreo de Google, ralentizan la web o la exponen a ataques. W Web Application Firewall Un Web Application Firewall (WAF) es un filtro de seguridad que inspecciona las peticiones HTTP a una web o API y bloquea las que coinciden con patrones de ataque. Instalarlo es fácil; lo difícil es elegir el modelo adecuado y ajustarlo para que frene ataques sin bloquear pedidos, formularios ni a tu propio equipo. A Apache (servidor HTTP) Apache HTTP Server es un servidor web de código abierto, desarrollado por la Apache Software Foundation desde 1995, que recibe las peticiones de los navegadores y les entrega las páginas, imágenes y archivos de un sitio. Es modular, gratuito, compatible con Linux, Windows y macOS, y popularizó la configuración por carpetas con el archivo .htaccess. G Googlebot Googlebot es el nombre genérico del rastreador web de Google Search: el programa que descarga páginas de internet para que Google pueda indexarlas y mostrarlas en sus resultados. Tiene dos variantes, smartphone y ordenador, y lo que no rastrea no puede posicionar, por eso es la base de cualquier estrategia SEO.

Cuéntanos tu proyecto. Te respondemos en 48 h.

Auditoría gratuita de IA, campañas, web y SEO, con prioridades y cifras reales de tu negocio.

✓ Sin compromiso ✓ Respuesta en 48 h laborables ✓ Un consultor senior, no un bot
WA WhatsApp