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 . |
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 . |
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 |
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:
- 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
conProxy refused to create tunnel with response status 403
.
Asegúrate de que la opción Show all FlowInfos esté habilitada:
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
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
- Navega a la fase AX (datos de Analytics registrados) en el seguimiento y haz clic en ella.
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ás los valores de X-Apigee-fault-code y X-Apigee-fault-source como
protocol.http.ProxyTunnelCreationFailed
ytarget
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:
- 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. 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.
- Busca para ver si hay errores
503
con el código de errorprotocol.http.ProxyTunnelCreationFailed
durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con503
. 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-codeEjemplo 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
- 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. - 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. - En este caso, el código de estado es
403
, que significa Prohibido. - 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.
- 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.
- Según el tipo de restricción de firewall o de LCA, debes solucionar el problema de forma adecuada.
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:
- Determina que
faultstring
contengaProxy refused to create tunnel with response status 403
mediante el seguimiento como se explica en Pasos comunes de diagnóstico. - Navega a la fase Inicio del flujo de solicitudes de destino y revisa los Encabezados de la solicitud.
- Verifica el valor del nombre de host especificado en el Encabezado del host en la sección Encabezados de la solicitud.
- Si el encabezado Host contiene el nombre del host del proxy, esa es la causa del error.
- 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.
- 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
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 errorProxy refused to create tunnel with response status 403
.
tcpdump
Para determinar el encabezado del host con tcpdump, haz lo siguiente:
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.- Analiza los datos de
tcpdump
con la herramienta Wireshark o una herramienta similar. A continuación, verás un ejemplo de análisis de tcpdump con Wireshark:
- 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.
- En el paquete 16, Message Processor se conectó al host del proxy
httpbin.org
(como se muestra en el ejemplo anterior). 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.
- 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 hosthttpin.org
anterior, falla con el errorProxy refused to create tunnel with response status 403
.
- Determina que
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:
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>
Asegúrate de que las otras propiedades relacionadas con el proxy de reenvío estén configuradas en Message Processor de la siguiente manera:
- Revisa el archivo
/opt/apigee/customer/application/message-processor.properties
en cada uno de los procesadores de mensajes. 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
- Revisa el archivo
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