504 Gateway Timeout from Backend Server

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Síntoma

La aplicación cliente recibe un código de estado HTTP 504 con el mensaje “Gateway Timeout” en respuesta a las llamadas a la API.

Esta respuesta de error indica que el cliente no recibió una respuesta oportuna de Apigee Edge o el servidor de backend durante la ejecución de una llamada a la API.

Mensaje de error

La aplicación cliente recibe el siguiente código de respuesta:

HTTP/1.1 504 Gateway Timeout

Es posible que a este código le siga un mensaje de error similar al que se muestra a continuación:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

¿Qué causa los tiempos de espera de la puerta de enlace?

La ruta típica para una solicitud a la API realizada a través de Apigee Edge es Client -> Router -> Procesador de mensajes -> Backend Server, como se muestra en la siguiente figura:

Ruta de solicitud a la API

La aplicación cliente, los routers y los procesadores de mensajes están configurados con valores de tiempo de espera adecuados. Apigee Edge espera una respuesta para cada solicitud a la API en un período basado en los valores de tiempo de espera. Si no se recibe la respuesta dentro del período especificado, se muestra una respuesta 504 Gateway Timeout.

Causas posibles

En Apigee Edge, esta es la causa típica de una respuesta 504 Gateway Timeout del servidor de backend:

Causa Descripción Instrucciones de solución de problemas para
El servidor de backend responde con el tiempo de espera de la puerta de enlace 504 El servidor de backend agota el tiempo de espera y muestra una respuesta 504 Gateway Timeout al Message Processor. Usuarios perimetrales de nubes privadas y públicas

El servidor de backend responde con el tiempo de espera de la puerta de enlace 504

El servidor de backend puede responder con un código de respuesta HTTP de 504 Gateway Timeout.

Diagnóstico

En esta sección, se explica cómo diagnosticar correctamente un tiempo de espera de puerta de enlace 504. Procedimientos para los dominios privados Se enumeran los usuarios de la nube pública.

Procedimiento n.o 1: Usa Trace (usuarios de la nube privada y pública)

  1. Habilita Trace en la IU de Apigee para la API afectada.
  2. Envía una solicitud al servidor de backend.
  3. Si la solicitud a la API con errores muestra una respuesta 504 del servidor backend en Trace, entonces la causa del tiempo de espera de la puerta de enlace 504 es el servidor de backend.
  4. Para determinar el tiempo de respuesta, haz clic en el vínculo Respuesta recibida del servidor de destino en Trace. En este ejemplo, el tiempo transcurrido es de 60,004 ms:

    detalles de la fase de la IU

    La sección Detalles de la fase proporciona información adicional:

    • Destaca la respuesta 504 Gateway Timeout recibida del servidor de backend.
    • La sección Contenido de la respuesta muestra el cuerpo completo de la respuesta de la servidor de backend. Como se señaló anteriormente, el formato y el contenido de la carga útil de respuesta pueden variar según la implementación del servidor de backend.
    • El Encabezado de respuesta > Server puede indicar dónde se originó la respuesta.
  5. Para ver los datos de Analytics y confirmar el diagnóstico, haz clic en Datos de Analytics registrados. en Trace, como se muestra en la siguiente figura:

    los detalles de Analytics de Trace

    La sección Encabezados de respuesta de los detalles de la fase muestra los valores de X-Apigee-fault-code y X-Apigee-fault-source, como se muestra en el figura a continuación:

    detalles de la fase de Analytics desde la IU

    Si estos campos contienen los valores que se muestran en la siguiente tabla, la respuesta del error 504 se origina desde el servidor de backend:

    Encabezados de respuesta Valor
    X-Apigee-fault-source objetivo
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Buscar encadenamiento de proxy. Sigue estos pasos para determinar si el servidor de backend invoca a otro proxy en Apigee:
    1. Regresa a la fase Se envió la solicitud al servidor de destino y haz clic en el El botón Mostrar Curl para ver el alias del host del servidor de backend
    2. Si el alias del host del servidor backend apunta a un alias de host virtual, el encadenamiento de proxy en un lugar específico. Repite los pasos anteriores para cada proxy en cadena para diagnosticar la causa de la puerta de enlace 504 Respuesta de error de tiempo de espera. 504 Tiempos de espera de puerta de enlace que ocurren en proxies en cadena en otras etapas el ciclo de solicitud/respuesta se puede diagnosticar mediante esta guía.
    3. Si el alias del host del servidor de backend apunta al servidor de backend, continúa con Resolución.

Procedimiento 2: Invoca la API del servidor de backend directamente (usuarios de nubes públicas y privadas)

Llama al servidor de backend directamente para confirmar el mismo comportamiento de respuesta que encontró el tiempo de espera de la puerta de enlace 504 cuando la solicitud se hace a través de Apigee Edge.

  1. Asegúrate de tener todos los encabezados, los parámetros de consulta y las credenciales necesarios que se necesitan para pasar al servidor de backend como parte de la solicitud.
  2. Si el servicio de backend es de acceso público, puedes usar el comando curl. Postman o cualquier otro cliente REST, e invoca directamente la API del servidor de backend.
  3. Si solo se puede acceder al servidor de backend desde Message Processor, usa el curl de comandos, Postman o cualquier otro cliente REST para invocar la API del servidor de backend directamente desde el Message Processor.
  4. Si el servicio de backend muestra una respuesta 504 Gateway Timeout, continúa con Resolución.

Procedimiento 3: Verifica los registros de acceso de NGINX (solo usuarios de la nube privada)

Los registros de acceso de NGINX pueden ayudar a determinar si el servidor de backend envió la respuesta de error 504. Esto es muy útil si el problema ocurrió en el pasado, es intermitente o no se puede capturar. en Trace. Sigue estos pasos para verificar los registros de acceso de NGINX:

  1. Visualiza los registros de acceso de NGINX con el siguiente comando:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Verifica si hay respuestas de error 504 para el proxy de API afectado. Puedes verificar un período específico, si el problema ocurrió en el pasado o determina si las solicitudes siguen fallando con una respuesta de error 504.
  3. Si hay respuestas de error 504, determina si la respuesta de error se origina en el servidor de backend.
  4. La siguiente figura es un ejemplo de una entrada de registro de NGINX que muestra una respuesta de error 504 causada por el servidor de destino:

    ejemplos de registros de nginx

    Si los campos X-Apigee-fault-source y X-Apigee-fault-code contienen lo siguiente: valores que se muestran en la siguiente tabla, la respuesta 504 se origina en el servidor backend:

    Encabezados de respuesta Valor
    X-Apigee-fault-source objetivo
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Revisa el proxy de API afectado para comprobar el encadenamiento de proxy. es decir, el servidor de backend o extremo de destino invoca a otro proxy en Apigee. Si el proxy de API se con encadenamiento de proxy , repite los pasos anteriores para cada proxy en cadena para diagnosticar la causa del tiempo de espera de la puerta de enlace 504 respuesta de error. 504 Los tiempos de espera de la puerta de enlace que ocurren en proxies en cadena en otras etapas pueden diagnosticarse con esta guía.
  6. Si no hay encadenamiento de proxy y la respuesta del error 504 se origina en el servidor de backend ve a Resolución.

Procedimiento 4: Usa la supervisión de API (solo usuarios de la nube pública)

La supervisión de API permite aislar problemas áreas con rapidez para diagnosticar problemas de errores, latencia y rendimiento, y sus fuentes, como apps de desarrollador, Proxies de API, destinos de backend o la plataforma de API.

Analizar una situación de ejemplo que demuestra cómo solucionar problemas 5xx con tus APIs con la supervisión de API. Por ejemplo: configurar una alerta para notificar a los administradores cuando la cantidad de códigos de estado 504 supere un umbral específico

Solución

Si usas los procedimientos de diagnóstico descritos anteriormente, puedes trabajar con el equipo del servidor de backend para solucionar el problema. el problema en el servidor de backend. Esto puede incluir ajustar los tiempos de espera en los servidores backend o en cualquier balanceador de cargas frente a servidores de destino.

Recopile información de diagnóstico

Si el problema persiste, comparte la siguiente información de diagnóstico con el equipo de asistencia de Apigee.

Si eres usuario de la nube pública, proporciona la siguiente información:

  • Nombre de la organización
  • Nombre del entorno
  • Nombre del proxy de API
  • El comando curl completo que se usa para reproducir la respuesta del error 504
  • Archivo de seguimiento con solicitudes a la API que reciben una respuesta de error 504 Gateway Timeout

Si eres usuario de la nube privada, proporciona la siguiente información:

  • Mensaje de error completo observado para las solicitudes fallidas
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento con solicitudes a la API que reciben una respuesta de error 504 Gateway Timeout
  • Registros de acceso de NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Registros del procesador de mensajes
    /opt/apigee/var/log/edge-message-processor/logs/system.log