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 404
con el mensaje Not
Found
y el mensaje de error Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
como respuesta a las llamadas a la API.
Este error significa que Edge no pudo encontrar el proxy de API para el host virtual y la ruta de acceso especificados.
Mensaje de error
La aplicación cliente obtiene el siguiente código de respuesta:
HTTP/1.1 404 Not Found
Además, es posible que veas un mensaje de error similar al que se muestra a continuación:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
Causas posibles
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Host virtual con alias de host duplicado | Varios hosts virtuales tienen el mismo alias de host y número de puerto. | Usuarios perimetrales de nubes públicas y privadas |
Pasos comunes de diagnóstico
Los registros de NGINX y Message Processor serán útiles para solucionar problemas del error 404
.
Sigue estos pasos para verificar los registros:
- Visualiza los registros de NGINX con el siguiente comando:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Verifica los siguientes campos en las entradas de registro:
Campo Valor Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Toma nota del ID del mensaje de los registros.
- Revisa los registros de Message Processor
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)
para ver si si tienesmessaging.adaptors.http.flow.ApplicationNotFound
para la API específica o si tienes el ID de mensaje del paso 2 para la solicitud a la API.Ejemplo de mensaje de error del registro de Message Processor
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
El registro anterior muestra el código y el mensaje de error:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Causa: Varios hosts virtuales con el mismo alias de host y número de puerto
Los routers y procesadores de mensajes de Apigee Edge usan el encabezado del host, el número de puerto y las rutas de URI
para enrutar el tráfico al proxy de API correcto. Tener definiciones ambiguas, como múltiples aplicaciones
con el mismo alias de host y número de puerto es una
antipatrón y
puede dar lugar a comportamientos inesperados. Uno de los errores comunes que observarás es la
Error 404
con el mensaje Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
Normalmente, si existen varios hosts virtuales con el mismo alias de host, observarás
errores 404
intermitentes. Esto se debe a que el proxy de API específico se puede
para aceptar las solicitudes en solo uno de los hosts virtuales. Cuando las solicitudes a la API se enrutan al
host virtual específico configurado en el proxy de API, obtendrá una respuesta correcta.
Sin embargo, cuando las solicitudes de la API se enrutan a los otros hosts virtuales a los que se conecta el proxy de API
no están configuradas para aceptar las solicitudes, las APIs fallarán con estas 404
errores.
Sigue las instrucciones que se indican en
404 No se puede identificar el proxy del host: <nombre del host virtual> y la URL <path>, y
solucionar este error. Si ninguna de las causas genera este error, sigue estos pasos:
para determinar si los hosts virtuales con alias de host duplicados causan el error 404
errores.
Diagnóstico
Usa uno de los siguientes métodos para determinar si hay varios hosts virtuales que tengan el
mismo alias de host o número de puerto, lo que genera errores 404
:
- IU de Edge
- APIs de administración
IU de Edge
Sigue estas instrucciones para determinar si hay varios hosts virtuales con el mismo host. alias/puerto # con la IU de Edge.
Por ejemplo, si observaste el error 404
con la URL
http://example.com:9001/proxy1
, deberás ver qué hosts virtuales tienen
el alias de host example.com
y el puerto 9001
.
- En la nube pública y la nueva IU de Edge en la nube privada, haz lo siguiente:
- Selecciona Administrador.
- Selecciona Virtual Hosts.
- En cada Entorno, usa el filtro de búsqueda para determinar la clase Virtual Hosts que coinciden con el alias de host específico con el que la API se invocaron las solicitudes.
- Si encuentras varios hosts virtuales que usan el mismo alias de host, ve a Resolución para resolver este problema.
Por ejemplo:
- En IU clásica en la nube privada:
- Selecciona la pestaña APIs .
- Selecciona Configuración del entorno.
- Selecciona Virtual Hosts.
- Por cada Entorno, consulta la lista de Hosts virtuales para ver si hay alguna coincidencia. el alias de host específico con el que se invocaron las solicitudes a la API.
- Si encuentras varios hosts virtuales que coinciden con el mismo alias de host, ve a Resolución para resolver este problema.
Por ejemplo:
APIs de administración
Sigue estas instrucciones para determinar si hay varios hosts virtuales con el mismo host. alias/puerto # con las API de Management.
Obtén la definición de cada host virtual de cada uno de los entornos en tu a las organizaciones ver qué hosts virtuales tienen el mismo alias de host y número de puerto:
Por ejemplo, si observaste el error
404
con la URLhttp://example.com:9001/proxy1
, deberás buscar qué instancia los hosts tienen el alias de hostexample.com
y el puerto9001
.Obtén la lista de entornos
Usuario de la nube pública:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Usuario de la nube privada:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Aquí:
ORGANIZATION_NAME es el nombre de la organización.
Ejemplo:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Obtén la lista de hosts virtuales de un entorno
Usuario de la nube pública:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Usuario de la nube privada:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Aquí:
ORGANIZATION_NAME es el nombre de la organización.
ENVIRONMENT_NAME es el nombre del entorno.
Ejemplo:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Obtén la definición de cada uno de los hosts virtuales del entorno.
Usuario de la nube pública:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Usuario de la nube privada:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Aquí:
ORGANIZATION_NAME es el nombre de la organización.
ENVIRONMENT_NAME es el nombre del entorno.
VIRTUAL_HOST_NAME es el nombre del host virtual.
Ejemplo:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
Repite los dos pasos anteriores para los otros entornos de tu organización.
En este ejemplo, repite los pasos para el entorno
dev
:curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
[ "default" ]
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
En este ejemplo, puedes ver que los dos hosts virtuales
default
en dos entornos diferentes,test
ydev
, ambos Tener el mismo alias de hostexample.com
y número de puerto9001
Esta es la causa de los errores404
.- Si encuentras varios hosts virtuales que coinciden con el mismo alias de host, ve a Resolución para resolver este problema.
Solución
- Asegúrate de que cada host virtual solo contenga combinaciones únicas de alias de host y puertos.
- Si identificaste varios hosts virtuales con las mismas combinaciones de alias de host y puerto. debe actualizarlas con un alias de host único.
- Puedes actualizarlas con la IU de Edge o la API de Management. Encuentra las instrucciones. menos de Modifica un host virtual.
- Asegúrate de que cada alias de host tenga una entrada de DNS adecuada.
- En el ejemplo anterior, si nuestra configuración se veía así:
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- Puedes actualizar el host virtual incorrecto para que no se superpongan.
- Se actualizará el alias del host como
example2.com
. - Asegúrate de que el nuevo alias de host tenga una entrada de DNS similar a la del alias de host anterior.
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{ "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }' -i
HTTP/1.1 200 OK Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Type: application/json X-Apigee.user: user X-Apigee.organization: myorg X-Apigee.environment: dev X-Apigee.backends: management-server Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Length: 152 { "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- Vuelve a realizar las llamadas a la API al proxy y verifica que obtengas respuestas correctas de manera constante:
curl http://example.com:9001/proxy1
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type:": "all" }, { "items": [ "Why WonderWidgets are great", "Who buys WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
- Si el problema persiste, consulta Recopila información de diagnóstico.
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 usuario de la nube pública, proporciona la siguiente información:
- Nombre de la organización
- Nombre del entorno
- Nombre del proxy de API
- Completa el comando
curl
para reproducir el error404
- Si no se producen los errores
404
en este momento, proporciona el período con la información de la zona horaria cuando se produjeron errores404
en el pasado.
Si eres un usuario de la Nube privada, proporciona la siguiente información:
- Mensaje de error completo observado para las solicitudes fallidas
- Organización, nombre del entorno y nombre del proxy de API que está observando
404
de errores - Paquete de proxy de API
- Registros de acceso de NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Registros del procesador de mensajes
/opt/apigee/var/log/edge-message-processor/logs/system.log
- El período con la información de la zona horaria en el que se produjeron los errores
404