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

Estás consultando la documentación de Apigee Edge.
Consulta 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 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, es posible que veas el siguiente mensaje de error:

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

Reenvío y tunelización del proxy

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

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

Código de error: credentials.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, falta de disponibilidad del servidor de backend, tiempos de espera, etcétera.

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 generó este error.

Plantilla de cadena de fallas:

Proxy refused to create tunnel with response status STATUS_CODE

Causas posibles de algunos de los códigos de estado observados en la string de error:

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

Cadena de fallas Descripción
El proxy se rechazó la creación de un túnel con el estado de respuesta 403.

403 - Forbidden

Esto puede ocurrir debido a restricciones de firewall o de LCA configuradas en el servidor de backend que evitan la creación del túnel.

El proxy se rechazó la creación de un túnel con el estado de respuesta 503.

503 - Service Unavailable

Esto puede ocurrir debido a problemas de DNS, restricciones de firewall o falta de disponibilidad del servidor de backend que impiden la creación del túnel.

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

504 - Gateway Timeout

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

Según el código de estado observado en faultstring, deberás usar las técnicas adecuadas para solucionar el problema. En esta guía, se explica cómo solucionar 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) se produce si hay restricciones de firewall o LCA (Lista de control de acceso) configuradas en el servidor de backend que impidan que el servidor proxy cree el túnel entre Apigee Edge y el servidor proxy.

Causa Descripción Instrucciones de solución de problemas aplicables para
El proxy se rechazó a crear un túnel con estado de respuesta 403 El servidor proxy se niega a crear el túnel porque 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 realiza una de estas acciones:
    • Espera a que ocurra el error.
    • Si puedes reproducir el problema, realiza la llamada a la API para reproducir el problema 503 Service Unavailable con Proxy refused to create tunnel with response status 403.
  2. Asegúrate de que la opción Show all FlowInfos esté habilitada:

  3. Selecciona una de las solicitudes con errores y examina el seguimiento.
  4. Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
  5. Por lo general, verás el error después de la fase Se inició el flujo de solicitud de destino, 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 de Analytics registrados) 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 determina los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:

    ( ver imagen más grande)

    ( ver imagen más grande)

  8. Verás los valores de X-Apigee-fault-code y X-Apigee-fault-source como protocol.http.ProxyTunnelCreationFailed y target respectivamente, lo que indica que este error se produce porque la creación del túnel proxy falló porque no se recibió el encabezado de 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, sigue estos pasos:

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

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

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

  3. Busca para ver si hay errores 503 con el código de error protocol.http.ProxyTunnelCreationFailed durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con 503.
  4. Si encuentras algún error 503 en el que X-Apigee-fault-code coincida con el valor deX-Apigee-fault-code , determina el valor de X-Apigee-fault-code

    Ejemplo de error 503 del registro de acceso de NGINX:

    La entrada de ejemplo 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 un túnel con estado de respuesta 403

Diagnóstico

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

    Situación: La restricción de firewall del servidor de backend espera que el encabezado del host siempre contenga 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, sigue estos pasos:

    1. Determina que faultstring contenga Proxy refused to create tunnel with response status 403 mediante el seguimiento como se explica en Pasos comunes de diagnóstico.
    2. Navega a la fase Inicio del flujo de solicitudes de destino y revisa los Encabezados de la solicitud.
    3. Verifica el valor del nombre de host especificado en el Encabezado del host en la sección Encabezados de la solicitud.
    4. Si el encabezado Host contiene el nombre del host del proxy, esa es la causa del error.
    5. Esto se debe a que el firewall está configurado en el servidor de backend para aceptar las solicitudes solo si el Encabezado del host contiene el nombre del servidor de backend.
    6. Por lo tanto, cuando el servidor proxy intenta crear el túnel con el servidor de backend, falla y se muestra el error

      Proxy refused to create tunnel with response status 403.

      Seguimiento de ejemplo en el que se muestra que el encabezado del host tiene un nombre de host de proxy

      ( ver imagen más grande)

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

    tcpdump

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

    1. Captura un tcpdump en el servidor proxy para las solicitudes que provienen del 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 la herramienta Wireshark o una herramienta similar.
    3. A continuación, verás un ejemplo de análisis de tcpdump con Wireshark:

      ( ver imagen más grande)

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

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

Resolución

Situación: la restricción de firewall del servidor proxy espera que el encabezado del host siempre contenga el nombre de host del servidor de backend

Si comprobaste que este error se debe a que el firewall en el servidor de backend está configurado de manera que espera que el Encabezado del host siempre contenga el nombre de host del servidor backend, mientras que Message Processor envía el nombre de host del servidor proxy, sigue estos pasos para resolver el problema:

  1. Configura la propiedad use.proxy.host.header.with.target.uri como "true" 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 el proxy de reenvío estén configuradas 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 tu caso de uso o requisitos:

      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, recopila 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 con errores
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento para las solicitudes a la API
  • Registros de acceso de NGINX

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

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

  • Registros del sistema del procesador de mensajes

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

Referencias