404 Vários hosts virtuais com o mesmo alias de host

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

O aplicativo cliente recebe um código de status HTTP 404 com a mensagem Not Found e a mensagem de erro Unable to identify proxy for host: VIRTUAL_HOST and url: PATH como resposta às chamadas de API.

Esse erro significa que o Edge não conseguiu encontrar o proxy de API do host virtual e do caminho especificados.

Mensagem de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 404 Not Found

Além disso, uma mensagem de erro semelhante a esta pode aparecer:

{
   "fault":{
      "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
      }
   }
}

Causas possíveis

Causa Descrição Instruções de solução de problemas aplicáveis para
Host virtual com alias de host duplicado Vários hosts virtuais têm o mesmo alias de host e número de porta. Usuários de nuvem pública e privada de borda

Etapas comuns do diagnóstico

Os registros do NGINX e do Message Processor serão úteis para resolver o erro 404. Siga estas etapas para verificar os registros:

  1. Visualize os registros do NGINX usando o seguinte comando:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. Verifique os seguintes campos nas entradas de registro:
    Campo Valor
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    Anote o ID da mensagem que aparece nos registros.

  3. Verificar os registros do processador de mensagens (/opt/apigee/var/log/edge-message-processor/logs/system.log) para ver se você messaging.adaptors.http.flow.ApplicationNotFound para a API específica ou se você tem o parâmetro ID da mensagem da etapa 2 para a solicitação de API.

    Exemplo de mensagem de erro do registro do processador de mensagens

  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)
    

    O registro acima mostra o código e a mensagem de erro:

    code = messaging.adaptors.http.flow.ApplicationNotFound,
    message = Unable to identify proxy for host: vh1 and url: /weather
    

Causa: vários hosts virtuais com o mesmo alias de host e número de porta

Os processadores de mensagem e os roteadores de borda da Apigee usam o cabeçalho do host, o número da porta e os caminhos do URI para rotear o tráfego para o proxy de API correto. Ter definições ambíguas como várias com o mesmo alias de host e número de porta anti-padrão e pode levar a comportamentos inesperados. Um dos erros comuns que você vai observar é um 404 com a mensagem Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.

Em geral, se houver vários hosts virtuais com o mesmo alias de host, 404 erros intermitentes. Isso ocorre porque o proxy de API específico pode ser configurado aceitar as solicitações em apenas um dos hosts virtuais. Quando as solicitações de API são roteadas para o específico do host virtual configurado no proxy da API, você receberá uma resposta bem-sucedida. No entanto, quando as solicitações de API são encaminhadas para outros hosts virtuais aos quais o proxy de API está não configurada para aceitar as solicitações, as APIs vão falhar com estes 404 erros.

Siga as instruções fornecidas 404 Não foi possível identificar o proxy do host: <nome do host virtual> and url: <path> e solucionar esse erro. Se nenhuma das causas estiver causando esse erro, use as etapas abaixo para determinar se hosts virtuais com aliases de host duplicados estão causando a 404 erros.

Diagnóstico

Use um dos métodos a seguir para determinar se há vários hosts virtuais com o mesmo alias de host/porta # levando a 404 erros:

  • interface do Edge
  • APIs de gerenciamento

interface do Edge

Use estas instruções para determinar se há vários hosts virtuais com o mesmo host alias/porta # usando a interface do Edge.

Por exemplo, se você observou o erro 404 com o URL http://example.com:9001/proxy1, você precisa descobrir quais hosts virtuais têm o alias de host example.com e a porta 9001.

  1. Em Nuvem pública e Nova IU do Edge em nuvem privada:
    1. Selecione Administrador.
    2. Selecione Hosts virtuais.
    3. Em cada Environment, use o filtro de pesquisa para determinar o ambiente virtual Hosts que correspondem ao alias do host específico com que a API solicitações foram invocadas.
    4. Se você encontrar vários hosts virtuais usando o mesmo alias de host, acesse Resolução para resolver o problema.

    Por exemplo:

  2. Em IU clássica na nuvem privada:
    1. Selecione a guia APIs .
    2. Selecione Configuração do ambiente.
    3. Selecione Hosts virtuais.
    4. Para cada Environment, visualize a lista de hosts virtuais para verificar se há alguma correspondência o alias do host específico com que as solicitações da API foram invocadas.
    5. Se você encontrar vários hosts virtuais correspondentes ao mesmo alias de host, acesse Resolução para resolver o problema.

    Por exemplo:

APIs de gerenciamento

Use estas instruções para determinar se há vários hosts virtuais com o mesmo host alias/porta # usando as APIs de gerenciamento.

  1. Confira a definição de cada um dos hosts virtuais em cada um dos ambientes da sua organizações para ver quais hosts virtuais têm o mesmo alias de host e número de porta:

    Por exemplo, se você observou o erro 404 com o URL http://example.com:9001/proxy1, você precisa descobrir quais têm o alias example.com e a porta 9001.

    1. Acessar a lista de ambientes

      Usuário da nuvem pública:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
      

      Usuário da nuvem privada:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
      

      Em que:

      ORGANIZATION_NAME é o nome da organização.

      Exemplo:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
      
      [ "prod", "test", "dev" ]
      
    2. Acessar a lista de hosts virtuais em um ambiente

      Usuário da nuvem pública:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
      

      Usuário da nuvem privada:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
      

      Em que:

      ORGANIZATION_NAME é o nome da organização.

      ENVIRONMENT_NAME é o nome do ambiente;

      Exemplo:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
      
      [ "default" ]
      
    3. Confira a definição de cada um dos hosts virtuais no ambiente.

      Usuário da nuvem pública:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME  -u USERNAME
      

      Usuário da nuvem privada:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
      

      Em que:

      ORGANIZATION_NAME é o nome da organização.

      ENVIRONMENT_NAME é o nome do ambiente;

      VIRTUAL_HOST_NAME é o nome do host virtual.

      Exemplo:

      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. Repita as duas etapas acima para os outros ambientes na sua organização.

      Neste exemplo, repita as etapas para o ambiente 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" : [ ]
      }
      

      Neste exemplo, os dois hosts virtuais default em dois ambientes diferentes, test e dev, ambos contêm o mesmo alias de host example.com e número da porta 9001. Essa é a causa dos erros 404.

    5. Se você encontrar vários hosts virtuais correspondentes ao mesmo alias de host, acesse Resolução para resolver o problema.

Resolução

  1. Verifique se cada host virtual contém apenas combinações exclusivas de alias de host e porta.
  2. Se você identificou vários hosts virtuais com as mesmas combinações de alias de host e porta você deve atualizá-los com um alias de host exclusivo.
  3. Elas podem ser atualizadas na interface do Edge ou na API Management. As instruções estão disponíveis abaixo de Modificar um host virtual.
  4. Verifique se cada alias de host tem uma entrada DNS adequada.
  5. No exemplo discutido acima, se nossa configuração fosse assim:
    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. Você pode atualizar o host virtual incorreto para que eles não se sobreponham.
    2. Isso significa atualizar o alias de host como example2.com.
    3. Verifique se o novo alias de host tem uma entrada DNS semelhante ao 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. Faça as chamadas de API novamente para o proxy e verifique se você está recebendo respostas bem-sucedidas de forma consistente:
    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. Se o problema persistir, acesse Precisa de informações de diagnóstico.

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, colete as seguintes informações: informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

Se você for um usuário da nuvem pública, forneça as seguintes informações:

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy da API
  • Conclua o comando curl para reproduzir o erro 404.
  • Se os erros 404 não estiverem ocorrendo atualmente, forneça o período com as informações de fuso horário quando erros 404 ocorreram no passado.

Se você for um usuário da nuvem privada, forneça estas informações:

  • Mensagem de erro completa observada para as solicitações com falha
  • Organização, nome do ambiente e nome do proxy da API que você está observando 404 erro
  • Pacote de proxy de API
  • Registros de acesso do NGINX
    /opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
  • Registros do processador de mensagens
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • O período com as informações de fuso horário em que os erros 404 ocorreram