HTTPQUERY
Español

504 Gateway Timeout

Uso

El código de estado 504 Gateway Timeout significa que el servidor actúa como proxy o pasarela de un servidor ascendente. Tras recibir la solicitud HTTP, el servidor intentó reenviarla al servidor ascendente, pero no recibió ninguna respuesta dentro del tiempo permitido.

Está relacionado con el código de estado 502 Bad Gateway. Un 502 indica que el servidor ascendente devolvió una respuesta no válida, mientras que un 504 indica que no se recibió respuesta alguna.

Los tiempos de espera propios de cada plataforma varían. La API de Shopify impone un tiempo de espera de 10 segundos por solicitud y devuelve 504 Gateway Timeout cuando la respuesta no está lista dentro de esa ventana. Quienes trabajan con la API de Shopify deben optimizar las consultas y recurrir al procesamiento en segundo plano para las operaciones que superen ese límite.

Impacto en SEO

Googlebot interpreta los errores 5xx como una señal para reducir temporalmente la frecuencia de rastreo en todo el sitio. Las URL ya indexadas se conservan al principio, pero una caída prolongada hace que Google las elimine del índice. Cualquier contenido devuelto con una respuesta 504 se ignora. Google agrupa explícitamente 500, 502 y 503 como errores de servidor en su documentación. Un 504 entra en la misma categoría general de errores 5xx. Un error 5xx en el archivo robots.txt es mucho más grave, incluso cuando todas las demás páginas del sitio devuelven 200. Google detiene el rastreo hasta 12 horas y después recurre a una copia en caché durante un máximo de 30 días. Si el error persiste, Google desindexa el sitio por completo. Bingbot también considera las respuestas 5xx como fallos de rastreo. Los errores 5xx persistentes impiden la indexación en Bing.

Ejemplo

El cliente solicita un recurso y el servidor responde con un código de estado 504 Gateway Timeout porque el servidor ascendente no devolvió ninguna respuesta HTTP.

Solicitud

GET /news HTTP/1.1
Host: example.com

Respuesta

HTTP/1.1 504 Gateway Timeout
Content-Type: text/html; charset=UTF-8
Content-Length: 128

<html>
  <head>
    <title>Gateway Timeout</title>
  </head>
  <body>
    <p>The server is not responding.</p>
  </body>
</html>

Cómo solucionarlo

El proxy agotó el tiempo de espera mientras aguardaba la respuesta del backend. La solución pasa por ampliar el tiempo de espera o por acelerar el backend.

Aumente los tiempos de espera del proxy.

En nginx, el tiempo de espera predeterminado es de 60 segundos. Aumente las directivas correspondientes en el bloque server o location:

En Apache, establezca ProxyTimeout 300 en el host virtual o en la configuración global. Al usar mod_proxy_fcgi, el parámetro timeout de la directiva ProxyPassMatch controla la espera.

Alinee los tiempos de espera del backend. El proceso del backend necesita un tiempo de espera igual o superior. Para PHP, aumente max_execution_time en php.ini y request_terminate_timeout en la configuración del pool de PHP-FPM. Para Node.js, defina server.timeout. Para Gunicorn, use —timeout.

Optimice la operación lenta del backend. Un tiempo de espera agotado es el síntoma de una operación lenta. Perfile la solicitud para localizar el cuello de botella:

Respete los tiempos de espera impuestos por la plataforma. Las plataformas gestionadas aplican límites estrictos más cortos que los valores predeterminados habituales de los proxies. Shopify impone un techo de 10 segundos. Para las operaciones que superen el límite de la plataforma, delegue el trabajo en tareas en segundo plano y consulte los resultados mediante sondeo en lugar de bloquear la solicitud HTTP.

Revise la ruta de red. Verifique la conectividad entre el proxy y el backend con curl o telnet. La pérdida de paquetes, los retrasos de DNS o las reglas de cortafuegos en saltos intermedios contribuyen a los tiempos de espera agotados. Ejecute traceroute para identificar los segmentos de red lentos.

Añada almacenamiento en caché. Para las solicitudes idempotentes, almacenar la respuesta en caché en la capa del proxy evita repetir llamadas lentas al backend. Tanto proxy_cache_path de Nginx como mod_cache de Apache reducen la carga del servidor ascendente.

Referencias de código

.NET

HttpStatusCode.GatewayTimeout

Rust

http::StatusCode::GATEWAY_TIMEOUT

Rails

:gateway_timeout

Go

http.StatusGatewayTimeout

Symfony

Response::HTTP_GATEWAY_TIMEOUT

Python3.5+

http.HTTPStatus.GATEWAY_TIMEOUT

Java

java.net.HttpURLConnection.HTTP_GATEWAY_TIMEOUT

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_GATEWAY_TIMEOUT

Angular

@angular/common/http/HttpStatusCode.GatewayTimeout