Servicio no disponible [503 Service available - Proxytunnel failure with 403]

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 obtiene un código de estado HTTP de 503 Service Unavailable con el el código de error protocol.http.ProxyTunnelCreationFailed como respuesta a las llamadas a la API.

Mensaje de error

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

HTTP/1.1 503 Service Unavailable

Además, puedes observar el siguiente mensaje de error:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

Reenvío de proxy y tunelización

Apigee Edge permite que los proxies de tu API se comuniquen con tu servidor de backend a través de un proxy en el servidor web, como se explica Configura el proxy de reenvío. Si el servidor proxy abre una ruta segura (HTTPS) o no segura, (HTTP) al servidor de backend según el tipo de proxy (indicado por la propiedad HTTPClient.proxy.type) utilizada y transfiere los datos en ambas direcciones. Esto se conoce como túnel.

De forma predeterminada, Apigee Edge usa tunelización para todo el tráfico. Para inhabilitar la tunelización, la propiedad HTTPClient.use.tunneling debe configurarse como false.

Código de error: Protocol.http.ProxyTunnelCreationFailed

Apigee Edge muestra el código de error protocol.http.ProxyTunnelCreationFailed si el servidor proxy no puede crear un túnel entre Apigee Edge y el servidor de backend debido a problemas como firewall, restricciones de LCA (lista de control de acceso), problemas de DNS, servidor backend disponibilidad, tiempos de espera, etc.

Por lo general, el código de estado en el faultstring de la respuesta de Apigee Edge indica una posible causa de alto nivel que causó este error.

Plantilla de cadena de errores:

Proxy refused to create tunnel with response status STATUS_CODE

Posibles causas de algunos de los códigos de estado observados en una cadena de fallas:

En la siguiente tabla, se describen las posibles causas según el código de estado indicado en el faultstring:

Cadena de errores Descripción
El proxy se negó a crear el túnel con el estado de respuesta 403

403 - Forbidden

Esto puede suceder debido a restricciones de firewall o LCA configuradas en el de backend que impide la creación de un túnel.

El proxy se negó a crear el túnel con el estado de respuesta 503

503 - Service Unavailable

Esto puede ocurrir debido a problemas de DNS, restricciones de firewall, falta de disponibilidad que impide la creación de un túnel

El proxy se negó a crear el túnel con el estado de respuesta 504.

504 - Gateway Timeout

Esto puede suceder si hay tiempos de espera durante la creación del túnel.

Según el código de estado observado en el faultstring, debes usar técnicas adecuadas para solucionar el problema. En esta guía, se explica cómo solucionar problemas el problema si observas el código de estado 403 en faultstring para el código de error protocol.http.ProxyTunnelCreationFailed.

Causas posibles

Este error (código de estado 403) ocurre si hay firewall o LCA (código de acceso). lista de control) configuradas en el servidor de backend que impiden que que crea entre Apigee Edge y el servidor de backend a través del servidor proxy.

Causa Descripción Instrucciones de solución de problemas aplicables para
El proxy se negó a crear el túnel con el estado de respuesta 403 El servidor proxy se niega a crear el túnel cuando recibe el nombre de host del servidor proxy. en lugar del nombre de host del servidor de backend en el encabezado Host. Solo usuarios de la nube privada perimetral

Pasos comunes de diagnóstico

Usa una de las siguientes herramientas o técnicas para diagnosticar este error:

Herramienta de seguimiento

Para diagnosticar el error con la herramienta Trace, sigue estos pasos:

  1. Habilita la sesión de seguimiento y, luego, una de las siguientes opciones:
    • Espera a que se produzca el error.
    • Si puedes reproducir el problema, realiza la llamada a la API para hacerlo. 503 Service Unavailable con Proxy refused to create tunnel with response status 403.
  2. Asegúrate de que Show all FlowInfos esté habilitado:

  3. Selecciona una de las solicitudes fallidas y examina el seguimiento.
  4. Navega por las diferentes fases del seguimiento y localiza dónde se produjo la falla para determinar si se produjo un error.
  5. Por lo general, verás el error después de la fase Target Request Flow Started (Flujo de solicitud objetivo iniciado) como se muestra a continuación:

    Ten en cuenta la siguiente información:

    error: Proxy refused to create tunnel with response status 403

  6. Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
  7. Desplázate hacia abajo hasta la sección Encabezados de respuesta Detalles de la fase y determinar los valores de X-Apigee-fault-code y X-Apigee-fault-source como como se muestra a continuación:

    ( ver imagen más grande)

    ( ver imagen más grande)

  8. Verás los valores X-Apigee-fault-code y X-Apigee-fault-source como protocol.http.ProxyTunnelCreationFailed y target , respectivamente, lo que indica que este error se debe a que el túnel del proxy No se pudo crear, ya que no se recibió el encabezado del host esperado.

    Encabezados de respuesta Valor
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:

  1. Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para determina la información clave sobre 503 Service Unavailable HTTP errores.
  2. Verifica los registros de acceso de NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    Dónde: ORG, ORG y PORT# se reemplazan por valores reales.

  3. Realiza una búsqueda para ver si hay algún error 503 con el código de error protocol.http.ProxyTunnelCreationFailed durante un período específico (si el problema en el pasado) o si todavía hay solicitudes que fallan 503
  4. Si encuentras algún error 503 con el código X-Apigee-fault-code que coincida con el valor de protocol.http.ProxyTunnelCreationFailed, Luego, determina el valor de la X-Apigee-fault-source.

    Ejemplo de error 503 del registro de acceso de NGINX:

    La entrada de muestra anterior del registro de acceso de NGINX tiene los siguientes valores para X- Apigee-fault-code y X-Apigee-fault-source:

    Encabezados de respuesta Valor
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Causa: El proxy se negó a crear el túnel con el estado de respuesta 403.

Diagnóstico

  1. Determina el código de errores y la fuente de errores de 503 Service Unavailable con la herramienta de seguimiento o los registros de acceso de NGINX como se explica en Pasos comunes del diagnóstico.
  2. Revisa el Mensaje de error y determina el código de estado. se indica en el faultstring para la falla en la creación del túnel.
  3. En este caso, el código de estado es 403, lo que significa Prohibido.
  4. Esto significa que no hay suficientes derechos o privilegios para crear el túnel. Esto podría suceder si hay restricciones de firewall o LCA (lista de control de acceso) que y evitar la creación del túnel.
  5. Revisa las restricciones de firewall o LCA que estén configuradas en tu servidor de backend y que puede evitar la creación del túnel.
  6. Según el tipo de restricciones de firewall o LCA, debes solucionar el problema. apropiadamente.
  7. Veamos un ejemplo de restricción de firewall para explicar cómo solucionar este problema problema:

    Situación: Restricción de firewall en el servidor de backend espera que siempre el encabezado del host contienen el nombre de host del servidor de backend

    Puedes usar uno de los siguientes métodos para determinar el encabezado del host que pasa Apigee Edge:

    Trace

    Para determinar el encabezado del host con Trace, haz lo siguiente:

    1. Comprueba que faultstring contenga Proxy refused to create tunnel with response status 403 con un seguimiento como se explica en Pasos comunes del diagnóstico.
    2. Navega a la fase Target Request Flow Started y revisa la Encabezados de la solicitud
    3. Verifica el valor del nombre del host especificado en el Encabezado del host en la Sección Encabezados de solicitud.
    4. Si el encabezado Host contiene el nombre del host de proxy, entonces ese es el causa de este error.
    5. Esto se debe a que el firewall se configura en el servidor de backend para que acepte solo si el Encabezado del host contiene el nombre del servidor de backend.
    6. Cuando el servidor proxy intenta crear el túnel con el servidor backend, falla con el error

      Proxy refused to create tunnel with response status 403.

      Seguimiento de muestra que muestra el encabezado del host con un nombre de host de proxy

      ( ver imagen más grande)

      En el seguimiento de muestra que aparece arriba, muestra que el Encabezado de host contiene el nombre del host del proxy www.proxyserver.com. Dado que hay una restricción de firewall configurada en el servidor de backend que espera solo el backend del servidor que se incluirá en el Encabezado del host, obtendrás el error Proxy refused to create tunnel with response status 403.

    tcpdump

    Determina el encabezado del host con tcpdump

    1. Captura un tcpdump en el servidor proxy para las solicitudes que provienen de El componente Message Processor de Apigee Edge con el siguiente comando:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      Para obtener más información sobre el uso del comando tcpdump, consulta tcpdump.

    2. Analiza los datos de tcpdump con el Herramienta Wireshark o una herramienta similar herramienta.
    3. Este es un ejemplo de análisis del tcpdump con Wireshark:

      ( ver imagen más grande)

    4. Los números de paquete 13, 14 y 15 muestran que el mensaje El procesador está estableciendo una conexión con el servidor proxy a través de un TCP de tres vías proceso de protocolo de enlace.
    5. En el paquete 16, Message Processor se conectó al host del proxy httpbin.org (se muestra en el ejemplo anterior).
    6. Selecciona el paquete 16 y examina el contenido del paquete en detalle. específicamente, el Encabezado del host que el Mensaje pasa al servidor proxy Procesador.

    7. En el ejemplo anterior, se muestra el encabezado de host httpin.org, que es el nombre de host del servidor proxy. Por lo tanto, cuando el servidor proxy intenta Pasa el encabezado de host anterior para crear el túnel con el servidor de backend. httpin.org, falla con el error Proxy refused to create tunnel with response status 403.

Solución

Situación: La restricción de firewall en el servidor proxy espera que el encabezado del host contener siempre el nombre de host del servidor de backend

Si has determinado que este error se debe a que el firewall en el servidor configurado de modo que espere que el Encabezado del host siempre contenga el servidor backend. de host, mientras que el Message Processor envía el nombre de host del servidor proxy, realiza sigue estos pasos para resolver el problema:

  1. Configura la propiedad use.proxy.host.header.with.target.uri como verdadera en TargetEndpoint, como se muestra en el siguiente ejemplo:

    Ejemplo de configuración de TargetEndpoint:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  2. Asegúrate de que las otras propiedades relacionadas con de reenvío se configuran en Message Processor de la siguiente manera:

    1. Revisa el archivo /opt/apigee/customer/application/message-processor.properties en cada uno de los procesadores de mensajes.
    2. Asegúrate de que las siguientes propiedades estén configuradas según tus requisitos o caso de uso:

      Valores de muestra para propiedades:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      

Se debe recopilar información de diagnóstico

Si el problema persiste, incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:

Si eres un 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 de las solicitudes a la API
  • Registros de acceso de NGINX

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dónde: ORG, ENV y PORT# se reemplazan por valores reales.

  • Registros del sistema del procesador de mensajes

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Referencias