Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
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 para 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 observes el siguiente mensaje de error:
{
"fault":{
"faultstring":"Proxy refused to create tunnel with response status 403",
"detail":{
"errorcode":"protocol.http.ProxyTunnelCreationFailed"
}
}
}Proxy de reenvío y tunelización
Apigee Edge permite que tus proxies de API se comuniquen con tu servidor de backend a través de un servidor proxy, como se explica en
Configura el proxy de reenvío. El servidor proxy abre una conexión segura (HTTPS) o no segura
(HTTP) al servidor de backend según el tipo de proxy (indicado
por la propiedad HTTPClient.proxy.type) que se use y transfiere los datos
en ambas direcciones. Esto se conoce como tunelización.
De forma predeterminada, Apigee Edge usa la tunelización para todo el tráfico. Para inhabilitar la tunelización, la propiedad
HTTPClient.use.tunneling debe establecerse en 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 el firewall, las restricciones de la LCA (Lista de control de acceso), problemas de DNS, falta de disponibilidad del servidor de backend, tiempos de espera, etcétera.
El código de estado en el faultstring de la respuesta de Apigee Edge suele
indicar una posible causa de alto nivel que provocó este error.
Plantilla de Faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
Causas posibles de algunos de los códigos de estado observados en faultstring:
En la siguiente tabla, se describen las posibles causas según el código de estado indicado en el
faultstring:
| Faultstring | Descripción |
|---|---|
El proxy se negó a crear 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 impiden la creación del túnel. |
El proxy se negó a crear 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 el 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 el faultstring, debes usar
las técnicas adecuadas para solucionar el problema. En este manual, se explica cómo solucionar
el problema si observas el código de estado 403 en el faultstring
para el código de error protocol.http.ProxyTunnelCreationFailed.
Causas posibles
Este error (código de estado 403) ocurre si hay restricciones de firewall o de LCA (Lista de
control de acceso) configuradas en el servidor de backend que impiden que el servidor proxy cree el túnel entre Apigee Edge y el servidor de backend.
| Causa | Descripción | Instrucciones de solución de problemas aplicables para |
|---|---|---|
| El proxy se negó a crear un túnel con el estado de respuesta 403 | El servidor proxy se niega a crear el túnel, ya que 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 de Edge |
Pasos comunes de diagnóstico
Usa una de las siguientes herramientas o técnicas para diagnosticar este error:
Herramienta de Trace
Para diagnosticar el error con la herramienta de Trace, haz lo siguiente:
- Habilita la sesión de seguimiento y
haz lo siguiente:
- Espera a que se produzca el error o
- Si puedes reproducir el problema, realiza la llamada a la API para reproducir el problema
503 Service UnavailableconProxy refused to create tunnel with response status 403.
Asegúrate de que Mostrar todos los FlowInfos esté habilitado:
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y ubica dónde ocurrió la falla ocurrió.
Por lo general, verás el error después de la fase Target Request Flow Started , 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 (Analytics Data Recorded) en el seguimiento y haz clic en ella.
Desplázate hacia abajo hasta la sección Phase Details Response Headers 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.ProxyTunnelCreationFailedytargetrespectivamente, lo que indica que este error se produce porque falló la creación del túnel proxy , ya que no se recibió el encabezado de host esperado.Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:
- Si eres usuario de la nube privada, puedes usar los registros de acceso de NGINX para
determinar la información clave sobre los errores HTTP
503 Service Unavailable. Consulta los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logDonde: ORG, ORG y PORT# se reemplazan por valores reales.
- Busca si hay errores
503con el código de errorprotocol.http.ProxyTunnelCreationFaileddurante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con503. Si encuentras errores
503con el X-Apigee-fault-code que coincida con el valor deprotocol.http.ProxyTunnelCreationFailed, determina el valor de 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.ProxyTunnelCreationFailedX-Apigee-fault-source target
Causa: El proxy se negó a crear un túnel con el estado de respuesta 403
Diagnóstico
- Determina el código de falla y la fuente de falla para
503 Service Unavailablecon la herramienta de 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
indicado en el
faultstringpara la falla en la creación del túnel. - En este caso, el código de estado es
403, lo que significa Forbidden. - Esto significa que no hay derechos o privilegios suficientes para crear el túnel. Por lo general, esto puede ocurrir si hay restricciones de firewall o de LCA (Lista de control de acceso) que impiden la creación del túnel.
- Revisa las restricciones de firewall o de LCA que estén configuradas en tu servidor de backend y que puedan impedir la creación del túnel.
- Según el tipo de firewall o las restricciones de LCA, debes solucionar el problema de forma adecuada.
Tomemos como ejemplo una restricción de firewall para explicar cómo solucionar este problema:
Situación: La restricción de firewall en el servidor de backend espera que el encabezado de host siempre contenga el nombre de host del servidor de backend
Puedes usar una de las siguientes formas para determinar el encabezado de host que pasa Apigee Edge:
Seguimiento
Para determinar el encabezado de host con Trace, haz lo siguiente:
- Asegúrate de que el
faultstringcontengaProxy refused to create tunnel with response status 403con el seguimiento, como se explica en Pasos comunes de diagnóstico. - Navega a la fase Target Request Flow Started y revisa los encabezados de solicitud
- Verifica el valor del nombre de host especificado en el encabezado de host en la sección Encabezados de solicitud.
- Si el encabezado Host contiene el nombre de host del proxy, esa es la causa de este error.
- Esto se debe a que el firewall está configurado en el servidor de backend para aceptar las solicitudes solo si el encabezado de 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 con el error
Proxy refused to create tunnel with response status 403.Seguimiento de muestra que muestra el encabezado de host con el nombre de host del proxy
En el seguimiento de muestra que se muestra arriba, se indica que el encabezado de host contiene el nombre del host del proxy
www.proxyserver.com.Como hay una restricción de firewall configurada en el servidor de backend que espera que solo el nombre de host del servidor de backend esté contenido en el encabezado de host, obtienes el errorProxy refused to create tunnel with response status 403.
tcpdump
Para determinar el encabezado de host con tcpdump, haz lo siguiente:
Captura un
tcpdumpen 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.- Analiza los datos de
tcpdumpcon la herramienta Wireshark o una similar herramienta. A continuación, se muestra un análisis de muestra del tcpdump con Wireshark:
- Los números de paquete 13, 14 y 15 muestran que el Message Processor establece 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, el Message Processor se conectó al host del proxy
httpbin.org(que se muestra en el ejemplo anterior). Selecciona el paquete 16 y examina el contenido del paquete en detalle y en particular el encabezado de host que el Message Processor pasa al servidor proxy.
- 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 crear el túnel con el servidor de backend pasando el encabezado de hosthttpin.org, falla con el errorProxy refused to create tunnel with response status 403.
- Asegúrate de que el
Solución
Situación: La restricción de firewall en el servidor proxy espera que el encabezado de host siempre contenga el nombre de host del servidor de backend
Si determinaste que este error se produce porque el firewall del servidor de backend está configurado de modo que espera que el encabezado de host siempre contenga el nombre de host del servidor de backend, mientras que el Message Processor envía el nombre de host del servidor proxy, sigue los pasos que se indican a continuación para resolver el problema:
Establece la propiedad
use.proxy.host.header.with.target.urien true en el TargetEndpoint, como se muestra en el siguiente ejemplo:Configuración de TargetEndpoint de muestra:
<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 el Message Processor de la siguiente manera:
- Revisa el archivo
/opt/apigee/customer/application/message-processor.propertiesen cada uno de los Message Processors. Asegúrate de que las siguientes propiedades estén configuradas según tu caso de uso o requisitos:
Valores de muestra para las 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 Asistencia de Apigee Edge:
Si eres 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_logDonde: ORG, ENV y PORT# se reemplazan por valores reales.
Registros del sistema del Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log