Error 502 Bad Gateway: qué significa y cómo solucionarlo

Punto clave

Un 502 Bad Gateway significa que el servidor al que llegaste es una puerta de enlace o un proxy (nginx, Cloudflare, un balanceador de carga) y recibió una respuesta no válida del servidor de aplicaciones que tiene detrás. Como visitante, espera un minuto, recarga y comprueba si el sitio está caído para todos. Como propietario del sitio, el registro de errores de nginx suele mostrar en una línea cuál de estas cosas pasó: la aplicación no se está ejecutando, proxy_pass apunta al puerto o socket equivocado, la aplicación se cayó a mitad de la petición o las cabeceras de la respuesta eran demasiado grandes para el búfer del proxy.

Compruébelo ahora

Página de error 502 Bad Gateway de nginx junto a las cinco comprobaciones que resuelven la mayoría de los errores 502
Página de error 502 Bad Gateway de nginx junto a las cinco comprobaciones que resuelven la mayoría de los errores 502
Empiece a leer
  1. ¿Qué es el error 502 Bad Gateway?
  2. Las muchas caras de un error 502
  3. 502 vs. 500 vs. 503 vs. 504: ¿cuál es la diferencia?
  4. ¿Qué causa un error 502 Bad Gateway?
  5. Cómo solucionar un error 502 como visitante
  6. Cómo solucionar un 502 Bad Gateway en tu servidor
  7. 1. Lee el registro de errores del proxy
  8. 2. Comprueba que la aplicación upstream se está ejecutando
  9. 3. Asegúrate de que proxy_pass apunta al puerto o socket correcto
  10. 4. Un ejemplo real: cómo dnsrobot.net sirvió un 502
  11. Node.js detrás de un balanceador de carga: errores 502 aleatorios
  12. 502 Bad Gateway en Cloudflare
  13. ¿Un error 502 perjudica el SEO?
  14. Preguntas frecuentes

¿Qué es el error 502 Bad Gateway?

502 Bad Gateway es un código de estado HTTP que significa que el servidor que te responde actúa como puerta de enlace (gateway) o proxy, y recibió una respuesta no válida del servidor que tiene detrás. El estándar HTTP (RFC 9110, sección 15.6.3) lo define exactamente así: el servidor, "while acting as a gateway or proxy, received an invalid response from an inbound server it accessed while attempting to fulfill the request" (mientras actuaba como puerta de enlace o proxy, recibió una respuesta no válida de un servidor interno al que accedió para atender la petición).

La mayoría de los sitios web modernos tienen al menos dos capas. Un servidor frontal, como nginx, Apache, Cloudflare o un balanceador de carga en la nube, acepta tu conexión y luego pasa la petición a una aplicación upstream (el servidor de detrás), como PHP-FPM, una app de Node.js, Gunicorn de Python o un contenedor. Cuando ese upstream está caído, falla o responde con algo que el proxy no puede usar, el proxy no tiene nada que darte, así que devuelve un 502.

Lo importante es que la puerta de enlace en sí funciona. Recibió tu petición y respondió. El fallo está un paso más atrás.

¿Es un 502 para todos o solo para ti? Compruébalo

Las muchas caras de un error 502

El código de estado es el mismo en todas partes, pero la página que ves depende del proxy que la generó:

De dónde vieneQué dice la página
nginx502 Bad Gateway, con nginx (y a veces una versión) debajo
Apache (mod_proxy)Proxy Error. The proxy server received an invalid response from an upstream server.
Cloudflare (falló tu origen)Error 502 Bad gateway, con los recuadros de estado Browser / Cloudflare / Host
Cloudflare (error propio)Una página simple que dice 502 Bad Gateway, con "cloudflare" debajo
Microsoft IIS (ARR / ASP.NET Core)HTTP Error 502.3 - Bad Gateway, o HTTP Error 502.5 - Process Failure
Servicios de Google502. That's an error. The server encountered a temporary error…
Navegadores / appsHTTP Error 502, 502 Proxy Error, Bad Gateway: The proxy server received an invalid response

Veas la versión que veas, el nombre del proxy en el pie de la página es una pista útil: le dice al propietario del sitio qué capa debe investigar.

502 vs. 500 vs. 503 vs. 504: ¿cuál es la diferencia?

Todos los códigos 5xx significan "problema del servidor", pero cada uno apunta a una capa distinta:

CódigoNombreQué significaCausa típica
500Internal Server ErrorLa propia aplicación falló al procesar la peticiónError en el código, error fatal de PHP, configuración incorrecta
502Bad GatewayEl proxy recibió del upstream una respuesta no válida, o ninguna que pudiera usarAplicación caída o bloqueada, puerto o socket equivocado, cabeceras demasiado grandes
503Service UnavailableEl servidor no puede atender peticiones por el momentoSobrecarga, modo de mantenimiento, límites de peticiones
504Gateway TimeoutEl proxy esperó al upstream y se rindióConsulta lenta a la base de datos, script de larga duración, tiempo de espera demasiado bajo

Una regla rápida: 502 = el upstream rechazó la conexión, colgó o envió una respuesta mala, 504 = el upstream no respondió a tiempo. Nuestras guías sobre los errores vecinos los tratan a fondo: 500 Internal Server Error, 503 Service Unavailable y 504 Gateway Timeout.

¿Qué causa un error 502 Bad Gateway?

  • La aplicación upstream no se está ejecutando. PHP-FPM, Node, Gunicorn o el contenedor se cayó, no arrancó después de un despliegue o se está reiniciando.
  • El proxy apunta al lugar equivocado. proxy_pass o fastcgi_pass usa el puerto equivocado, una ruta de socket de PHP antigua tras una actualización, o localhost dentro de un contenedor Docker.
  • La aplicación se cae con algunas peticiones. Una página hace que el sistema mate el proceso por falta de memoria o provoca una excepción no controlada, y la conexión se cierra antes de que haya respuesta.
  • Todos los workers están ocupados. PHP-FPM alcanzó pm.max_children, así que las peticiones nuevas esperan en la cola del socket. La mayoría acaba en un 504 por tiempo de espera; cuando la cola se llena, nginx registra (11: Resource temporarily unavailable) y devuelve un 502.
  • Las cabeceras de la respuesta son demasiado grandes. Las cookies grandes o las cabeceras de seguridad extensas desbordan el proxy_buffer_size de nginx.
  • Desajuste de keep-alive detrás de un balanceador de carga. La aplicación cierra las conexiones inactivas antes de lo que espera el balanceador, así que este envía una petición por una conexión que se está cerrando.
  • El proxy no puede llegar al upstream tras un cambio de red. Un firewall que rechaza al proxy, o un upstream que cambió a otra IP, da un 502 (Connection refused, No route to host). Un firewall que descarta los paquetes en silencio da un 504, y detrás de Cloudflare se ven como 521 o 522.

Cómo solucionar un error 502 como visitante

No puedes reparar el servidor de otra persona, pero estos pasos confirman que el problema está realmente de su lado y eliminan las raras causas locales:

  • Espera entre 30 y 60 segundos y recarga (Ctrl + R, o Cmd + R en Mac). Muchos errores 502 duran solo lo que tarda un despliegue o un reinicio.
  • Comprueba si está caído para todos. El Verificador de páginas caídas de DNS Robot abre la página desde 11 lugares, y el Verificador de Cabeceras HTTP muestra el código de estado exacto que recibe nuestro servidor. Si ellos también ven un 502, el problema es el sitio, no tú.
  • Fuerza la recarga con Ctrl + Shift + R (Mac: Cmd + Shift + R), por si te están mostrando una página de error en caché.
  • Vacía tu caché DNS si el sitio cambió de hosting hace poco, para llegar al servidor nuevo. Aquí tienes cómo vaciar la caché DNS en cada sistema.
  • Desactiva las VPN y los proxies. Tu propio proxy puede ser la "puerta de enlace" que falla, sobre todo en redes de empresa.
  • Prueba otro navegador o tu teléfono con datos móviles. Si funciona ahí, borra las cookies de ese sitio.

Cómo solucionar un 502 Bad Gateway en tu servidor

En el lado del servidor, un 502 es de los errores más fáciles de resolver, porque el proxy suele registrar qué falló (las excepciones son la condición de carrera de keep-alive de un balanceador y los 502 propios de Cloudflare). Haz estas tres comprobaciones en orden; la cuarta parte es un ejemplo real.

1. Lee el registro de errores del proxy

Reproduce el 502 y lee las últimas 50 líneas del registro de errores del proxy (los comandos están debajo de la tabla). Cada uno de estos mensajes de nginx apunta a su propia solución:

Mensaje del registroQué significa
connect() failed (111: Connection refused) while connecting to upstreamNada escucha en el puerto del upstream: la aplicación está caída o en otro puerto
connect() to unix:/run/php/php8.x-fpm.sock failed (2: No such file or directory)El socket de PHP-FPM no existe, normalmente por un cambio de versión de PHP
connect() to unix:… failed (13: Permission denied)nginx no puede acceder al socket: corrige listen.owner / listen.group
connect() to unix:… failed (11: Resource temporarily unavailable)La cola del socket de PHP-FPM está llena: todos los workers están ocupados (pm.max_children)
upstream prematurely closed connection while reading response headerLa aplicación se cayó o cerró la conexión a mitad de la petición
upstream sent too big header while reading response header from upstreamLas cabeceras de la respuesta superan proxy_buffer_size (fastcgi_buffer_size en PHP-FPM)
no live upstreams while connecting to upstreamTodos los servidores del bloque upstream están marcados como fallidos
bash
# nginx
sudo tail -n 50 /var/log/nginx/error.log

# Apache
sudo tail -n 50 /var/log/apache2/error.log    # Debian/Ubuntu
sudo tail -n 50 /var/log/httpd/error_log      # RHEL/Alma/Rocky

2. Comprueba que la aplicación upstream se está ejecutando

bash
# PHP-FPM (ajusta la versión)
sudo systemctl status php8.3-fpm
sudo journalctl -u php8.3-fpm -n 50

# Node.js con PM2
pm2 status
pm2 logs --lines 50

# Docker
docker ps -a          # busca contenedores que se reinician una y otra vez
docker logs --tail 50 <container>

# ¿Se mató el proceso por usar demasiada memoria?
sudo dmesg -T | grep -i "killed process"

Si el servicio está detenido, inícialo y averigua por qué se detuvo: un despliegue fallido, un error de sintaxis en la nueva versión o el OOM killer, que mata procesos cuando falta memoria. En el registro de PHP-FPM, server reached pm.max_children setting significa que todos los workers estaban ocupados. Sube pm.max_children solo si el servidor tiene RAM suficiente; si no, busca las peticiones lentas que mantienen ocupados a los workers.

3. Asegúrate de que proxy_pass apunta al puerto o socket correcto

Compara el destino configurado en nginx con lo que realmente está escuchando:

bash
# ¿A dónde reenvía nginx las peticiones?
sudo nginx -T 2>/dev/null | grep -n "proxy_pass\|fastcgi_pass"

# ¿Qué está escuchando realmente?
sudo ss -tlnp            # puertos TCP y sus procesos
ls -l /run/php/          # archivos de socket de PHP-FPM

Dos desajustes clásicos: después de actualizar PHP, el socket pasa a ser php8.3-fpm.sock mientras nginx sigue apuntando a php8.1-fpm.sock; y dentro de Docker, proxy_pass http://localhost:3000 apunta al propio contenedor de nginx en lugar de a la aplicación, así que usa el nombre del servicio de Compose (http://app:3000).

4. Un ejemplo real: cómo dnsrobot.net sirvió un 502

Nos pasó el 30 de septiembre de 2026. Después de publicar un lote de nuevas entradas del blog, exactamente una de ellas devolvía 502 Bad Gateway a través de nginx 1.24, mientras que todas las demás páginas funcionaban. La aplicación Next.js que hay detrás de nginx devolvía esa misma página con 200 OK cuando la pedíamos directamente en el puerto 3000. Es decir, la aplicación estaba bien y lo que fallaba era la puerta de enlace.

El registro de errores de nginx tenía la respuesta en una línea: upstream sent too big header while reading response header from upstream. Las cabeceras de respuesta de esa página sumaban 4087 bytes, sobre todo por una cabecera Content-Security-Policy larga y varias cabeceras Link de precarga. nginx lee la primera parte de la respuesta, incluidas todas las cabeceras, en un búfer definido por proxy_buffer_size, que por defecto ocupa una página de memoria: 4 KB en nuestro servidor. Eso dejaba solo 9 bytes libres, y el bloque completo de cabeceras, con la línea de estado incluida, lo desbordó.

La solución fueron tres líneas en el bloque location que hace de proxy hacia la aplicación; tras nginx -t y una recarga, la página devolvió 200:

nginx
location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_buffer_size 16k;        # espacio para cabeceras grandes (antes, 4k por defecto)
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
}

La lección: si solo algunas páginas devuelven 502 mientras el resto del sitio funciona, busca un límite de tamaño, como cabeceras grandes o valores de Set-Cookie en esas páginas, antes de sospechar de la aplicación.

Node.js detrás de un balanceador de carga: errores 502 aleatorios

Si ejecutas Node.js detrás de un AWS Application Load Balancer o un balanceador similar y ves errores 502 ocasionales sin nada en los registros de tu aplicación, revisa los tiempos de keep-alive. El servidor HTTP de Node cierra las conexiones keep-alive inactivas tras 5 segundos por defecto en Node 26 y anteriores (server.keepAliveTimeout; Node 24.6 y 22.19 añadieron encima un keepAliveTimeoutBuffer de 1 segundo, y la próxima versión mayor sube el valor por defecto a 65 segundos), mientras que un ALB de AWS mantiene abiertas las conexiones inactivas durante 60 segundos. A veces el balanceador reutiliza una conexión justo cuando Node la cierra, y esa petición vuelve como un 502.

La solución es que el tiempo de espera de la aplicación sea más largo que el del balanceador:

javascript
const server = app.listen(3000)
// Debe ser mayor que el tiempo de inactividad del balanceador (ALB por defecto: 60s)
server.keepAliveTimeout = 65_000
server.headersTimeout = 66_000 // solo hace falta antes de Node 18; no molesta después

502 Bad Gateway en Cloudflare

Detrás de Cloudflare, mira primero quién generó la página de error (guía de Cloudflare sobre 502/504):

  • Página con la marca de Cloudflare (Browser ✓ / Cloudflare ✓ / Host ✗): tu servidor de origen devolvió un 502 o un 504 a Cloudflare. Arréglalo en el origen con los pasos del lado del servidor de arriba. Si Cloudflare no puede conectar con el origen en absoluto, recibes un 521 o un 522, no un 502.
  • Una página simple que dice "502 Bad Gateway" con "cloudflare" debajo: esta la genera el propio Cloudflare. Su documentación señala dos causas: que tu origen envíe contenido gzip defectuoso, o contenido gzip sin un Content-Length actualizado (desactiva la compresión en el origen para probarlo), y un pico repentino de tráfico en un centro de datos de Cloudflare, que se pasa solo.
  • Una página que nombra a nginx o Apache: normalmente la petición llegó a tu servidor sin pasar por Cloudflare, así que el registro DNS no tiene proxy (nube gris, "DNS only") o estás mirando el origen directamente (salvo que una Cache Rule active "Origin error page pass-through").
  • ¿Cambiaste de hosting? Actualiza el registro A del origen en el DNS de Cloudflare (una IP de origen incorrecta suele verse como 521, 522 o 523). Un DNS Lookup solo muestra el origen de los registros con nube gris (DNS only); los registros con proxy responden con las IP de Cloudflare.

¿Un error 502 perjudica el SEO?

Una caída breve, no. La documentación de Google dice que los errores de servidor 5xx hacen que sus rastreadores ralenticen temporalmente el rastreo. Las páginas que ya están indexadas se mantienen en el índice al principio, pero si los errores persisten, Google acaba eliminando esas URL.

Así que un 502 que dura unos minutos durante un despliegue es inofensivo. Un 502 en páginas importantes que dura días, o que aparece de forma intermitente durante semanas, puede reducir el rastreo y costar posiciones. Monitoriza tus URL clave y revisa el informe de Estadísticas de rastreo de Search Console después de cualquier caída.

¿El sitio devuelve un 502 a todo el mundo?

El Verificador de Cabeceras HTTP de DNS Robot solicita cualquier URL desde nuestros servidores y muestra el código de estado exacto, el software del servidor y todas las cabeceras de la respuesta. Es la forma más rápida de confirmar un 502.

Fuentes

  1. RFC 9110 §15.6.3: 502 Bad Gateway, IETF
  2. ngx_http_proxy_module (proxy_buffer_size), nginx
  3. Error 502 bad gateway or error 504 gateway timeout, Cloudflare
  4. HTTP status codes and Google's crawlers, Google

Preguntas frecuentes

¿Qué significa 502 Bad Gateway?

Significa que el servidor al que llegaste es una puerta de enlace o un proxy, como nginx, Cloudflare o un balanceador de carga, y recibió una respuesta no válida del servidor de aplicaciones que tiene detrás. El proxy funciona; la aplicación de detrás está caída, se bloqueó, es inalcanzable o envió una respuesta que el proxy no pudo usar.

¿Un 502 Bad Gateway es culpa mía?

Casi nunca. Un 502 es un error del lado del servidor. Recarga pasado un minuto y comprueba con un verificador de sitios caídos si está caído para todos. Las pocas causas locales son tu propia VPN o proxy, un registro DNS obsoleto después de que el sitio cambiara de hosting o las cookies de ese sitio; otro navegador o los datos móviles las descartan.

¿Cuánto dura un error 502 Bad Gateway?

No hay un tiempo fijo. Un 502 causado por un despliegue o un reinicio suele desaparecer en unos segundos o pocos minutos. Si dura más, la aplicación upstream se ha caído o está mal configurada, y seguirá así hasta que el propietario del sitio lo arregle.

¿Qué significa 502 Bad Gateway nginx?

nginx es el proxy que respondió, y no pudo obtener una respuesta válida de la aplicación a la que reenvía las peticiones, como PHP-FPM o una app de Node.js. El motivo exacto está en el registro de errores de nginx, normalmente /var/log/nginx/error.log.

¿Cuál es la diferencia entre el error 502 y el 504?

502 Bad Gateway significa que el proxy no pudo conectar con el servidor upstream, o que este cerró la conexión o devolvió una respuesta no válida. 504 Gateway Timeout significa que el upstream no respondió dentro del tiempo límite del proxy. Un 502 sugiere una caída o una mala configuración; un 504, lentitud.

¿Una VPN o un proxy pueden causar un error 502?

Sí, si tu propia VPN o el proxy de tu empresa es la puerta de enlace que falla. En ese caso el error aparece en todos los sitios, o solo cuando la VPN está activada. Desconéctala y recarga. Si el 502 desaparece, el problema es tu VPN o tu proxy, no el sitio web.

¿Cómo soluciono un 502 Bad Gateway en Cloudflare?

Mira la página de error. Una página con la marca de Cloudflare y el Host marcado como fallido significa que tu propio servidor de origen devolvió el 502, así que sigue los pasos del lado del servidor: el registro de errores, si la aplicación se está ejecutando, proxy_pass. Una página simple que dice "502 Bad Gateway" con "cloudflare" debajo la genera el propio Cloudflare: su documentación señala gzip defectuoso desde el origen y cambios breves de tráfico entre centros de datos.

¿Por qué me sale un 502 solo en una página de mi sitio?

Cuando casi todo el sitio funciona y una página devuelve 502, fíjate en lo que tiene de particular esa página: cabeceras de respuesta o valores de Set-Cookie que desbordan el búfer del proxy, o una ruta de código que hace caer la aplicación o le agota la memoria (una consulta muy lenta da un 504, no un 502). El registro de errores del proxy indica la causa, por ejemplo upstream sent too big header.

¿Un error 502 afecta al SEO?

Las caídas breves, no. Google ralentiza el rastreo cuando ve errores 5xx y mantiene las páginas indexadas durante un tiempo. Los 502 persistentes en páginas importantes pueden hacer que Google elimine esas URL del índice, así que corrige rápido los errores que se prolongan.

Sobre el autor

Shaik Vahid

Fundador de DNS Robot. Vahid pasó años en el soporte de alojamiento web resolviendo dominios, registros DNS, certificados SSL y la entrega de correo para clientes. Desarrolla las herramientas de DNS Robot y escribe estas guías a partir de los errores que la gente encuentra de verdad.

Verificador de encabezados HTTP

Analiza cabeceras de respuesta HTTP y clasificación de cabeceras de seguridad