404 Varios hosts virtuales con el mismo alias de host

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:

  1. Visualiza los registros de NGINX con el siguiente comando:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. 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.

  3. Revisa los registros de Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) para ver si si tienes messaging.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

  4. 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.

  1. En la nube pública y la nueva IU de Edge en la nube privada, haz lo siguiente:
    1. Selecciona Administrador.
    2. Selecciona Virtual Hosts.
    3. 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.
    4. Si encuentras varios hosts virtuales que usan el mismo alias de host, ve a Resolución para resolver este problema.

    Por ejemplo:

  2. En IU clásica en la nube privada:
    1. Selecciona la pestaña APIs .
    2. Selecciona Configuración del entorno.
    3. Selecciona Virtual Hosts.
    4. 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.
    5. 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.

  1. 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 URL http://example.com:9001/proxy1, deberás buscar qué instancia los hosts tienen el alias de host example.com y el puerto 9001.

    1. 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" ]
      
    2. 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" ]
      
    3. 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" : [ ]
      }
      
    4. 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 y dev, ambos Tener el mismo alias de host example.com y número de puerto 9001 Esta es la causa de los errores 404.

    5. Si encuentras varios hosts virtuales que coinciden con el mismo alias de host, ve a Resolución para resolver este problema.

Solución

  1. Asegúrate de que cada host virtual solo contenga combinaciones únicas de alias de host y puertos.
  2. Si identificaste varios hosts virtuales con las mismas combinaciones de alias de host y puerto. debe actualizarlas con un alias de host único.
  3. Puedes actualizarlas con la IU de Edge o la API de Management. Encuentra las instrucciones. menos de Modifica un host virtual.
  4. Asegúrate de que cada alias de host tenga una entrada de DNS adecuada.
  5. 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" : [  ]
    }
    
    1. Puedes actualizar el host virtual incorrecto para que no se superpongan.
    2. Se actualizará el alias del host como example2.com.
    3. 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" : [  ]
      }
      
  6. 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"
        }
    
    }
    
  7. 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 error 404
  • 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 errores 404 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