Preguntas

Error 504 – Tiempo de espera agotado (Gateway Timeout) Imprimir

  • 0

El error 504 ocurre cuando un servidor que actúa como puerta de enlace (gateway) o proxy no recibe una respuesta a tiempo del servidor principal (backend).

En otras palabras:
“El servidor al que intento conectarme no responde. Me cansé de esperar.”

Se parece al 502, pero con una diferencia clave:

  • 502 = Respuesta inválida del backend

  • 504 = El backend NO respondió a tiempo

Muy común en:

  • Nginx

  • Cloudflare

  • Balanceadores de carga

  • APIs lentas

  • Microservicios

  • Servidores saturados


 Causas más comunes

 1. El backend está demasiado lento

La causa más típica. El servidor final tarda tanto que el proxy “se rinde”.


 2. Timeouts demasiado bajos en Nginx, Apache o Cloudflare

El servidor corta la conexión antes de que el backend termine su trabajo.


 3. Consultas a la base de datos extremadamente lentas

Ejemplos:

  • SELECT sin índices

  • Tablas muy grandes

  • JOINs complejos

  • Bloqueos de escritura → deadlocks


 4. Código backend que tarda más de lo permitido

  • Loops pesados

  • Procesos mal optimizados

  • Procesos que consumen CPU

  • Cálculos complejos o archivos grandes


 5. Cloudflare no puede conectar con el servidor origen

Cloudflare devuelve 504 si no recibe respuesta rápida del hosting.


 6. Firewall bloqueando la conexión

CSF, iptables o firewalls externos pueden impedir que el proxy hable con el backend.


 7. Microservicios o APIs apagadas

Un servicio A intenta hablar con servicio B, pero B está:

  • Caído

  • Colgado

  • Lento

  • Saturado


 Soluciones recomendadas

1) Aumentar los timeouts en Nginx

Editar configuración:

 
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300;

Reiniciar después:

 
systemctl restart nginx

2) Optimizar consultas a la base de datos

  • Crear índices

  • Optimizar JOINs

  • Revisar logs de consultas lentas

  • Resolver locks o deadlocks

En MySQL:

 
SHOW FULL PROCESSLIST;

3) Optimizar el código backend

Evitar:

  • Procesos demasiado largos

  • Búsquedas pesadas

  • Loops innecesarios

  • Generación de archivos enormes en caliente


4) Revisar estado de PHP-FPM, Node.js, Python, etc.

Ejemplo:

 
systemctl status php-fpm systemctl restart php-fpm

Si el backend está congelado, habrá 504.


5) Verificar firewall o reglas de seguridad

Asegura que Nginx o Cloudflare puedan comunicarse con el backend.


6) Aumentar timeout en Cloudflare

Cloudflare permite ~100 segundos máximo.
Si tu backend tarda más → Cloudflare cortará.

Soluciones:

  • Optimizar backend

  • Saltarse Cloudflare (modo DNS Only)

  • Usar workers o colas


7) Usar colas de procesamiento

Si la operación tarda demasiado:

  • Jobs en segundo plano

  • Mensajería: Redis, RabbitMQ

  • Procesos asíncronos

Evita bloquear al usuario.


8) Verificar logs

Nginx:

 
/var/log/nginx/error.log

Apache:

 
/var/log/apache2/error.log

Backend (PHP/Node):

 
/var/log/php-fpm/error.log

Los logs revelan si hubo bloqueo, lentitud o caída.


 Consejo Pro

El error 504 casi siempre indica que tu aplicación está:

  • Lenta

  • Saturada

  • Con cuellos de botella

  • O mal configurada

Implementa siempre:

  • Monitoreo

  • Logs

  • Alertas

  • Timeouts correctos

  • Optimización de base de datos

Para evitar este error en producción.


¿Fue útil la respuesta?
Volver