Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. info
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 para o host virtual e o caminho especificados.
Mensagem de erro
O aplicativo cliente recebe o seguinte código de resposta:
HTTP/1.1 404 Not Found
Além disso, você pode observar uma mensagem de erro semelhante à mostrada abaixo:
{
"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 da nuvem pública e privada do Edge |
Etapas comuns do diagnóstico
Os registros do NGINX e do processador de mensagens serão úteis para resolver o erro 404.
Siga estas etapas para verificar os registros:
- Visualize os registros do NGINX usando o seguinte comando:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Verifique os seguintes campos nas entradas de registro:
Campo Valor Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundAnote o ID da mensagem nos registros.
- Verifique os registros do processador de mensagens
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)para saber se você temmessaging.adaptors.http.flow.ApplicationNotFoundpara a API específica ou se tem o ID de mensagem exclusivo da etapa 2 para a solicitação de API.Exemplo de mensagem de erro do registro do processador de mensagens
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 da seguinte maneira:
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 roteadores e processadores de mensagens do Apigee Edge usam o cabeçalho do host, o número da porta e os caminhos de URI
para rotear o tráfego para o proxy de API correto. Ter definições ambíguas, como vários hosts
virtuais com o mesmo alias de host e número de porta, é um antipadrão documentado
e
pode levar a comportamentos inesperados. Um dos erros comuns que você vai observar é um
404 erro com a mensagem Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
Normalmente, se houver vários hosts virtuais com o mesmo alias de host, você vai observar
erros 404 intermitentes. Isso ocorre porque o proxy de API específico pode ser configurado
para aceitar as solicitações em apenas um dos hosts virtuais. Quando as solicitações de API são roteadas para o
host virtual específico configurado no proxy de API, você recebe uma resposta bem-sucedida.
No entanto, quando as solicitações de API são roteadas para os outros hosts virtuais em que o proxy de API não está configurado para aceitar as solicitações, as APIs falham com estes 404
erros.
Siga as instruções fornecidas em
404 Não foi possível identificar o proxy para o host: <nome do host virtual> e o URL: <caminho> e
resolva esse erro. Se nenhuma das causas estiver levando a esse erro, use as etapas
abaixo para determinar se os hosts virtuais com aliases de host duplicados estão causando os 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/número de porta que levam 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 alias de host/número de porta usando a interface do Edge.
Por exemplo, se você observou o erro 404 com o URL
http://example.com:9001/proxy1, será necessário encontrar quais hosts virtuais têm
o alias de host example.com e a porta 9001.
- Na nuvem pública e na nova interface do Edge na nuvem privada:
- Selecione Administrador.
- Selecione Hosts virtuais.
- Para cada ambiente, use o filtro de pesquisa para determinar os hosts virtuais que correspondem ao alias de host específico com que as solicitações de API foram invocadas.
- Se você encontrar vários hosts virtuais usando o mesmo alias de host , acesse Resolução para resolver esse problema.
Por exemplo:

- Na interface clássica na nuvem privada:
- Selecione a guia APIs .
- Selecione Configuração do ambiente.
- Selecione Hosts virtuais.
- Para cada ambiente, confira a lista de hosts virtuais para saber se algum corresponde ao alias de host específico com que as solicitações de API foram invocadas.
- Se você encontrar vários hosts virtuais que correspondam ao mesmo alias de host , acesse Resolução para resolver esse problema.
Por exemplo:

APIs de gerenciamento
Use estas instruções para determinar se há vários hosts virtuais com o mesmo alias de host/número de porta usando as APIs de gerenciamento.
Receba a definição de cada um dos hosts virtuais em cada um dos ambientes nas suas organizações para saber quais hosts virtuais têm o mesmo alias de host e número de porta:
Por exemplo, se você observou o erro
404com o URLhttp://example.com:9001/proxy1, será necessário encontrar quais hosts virtuais têm o alias de hostexample.come a porta9001.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" ]
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" ]
Acessar 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" : [ ] }Repita as duas etapas acima para os outros ambientes da 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, é possível observar que os dois hosts virtuais
defaultem dois ambientes diferentes,testedev, contêm o mesmo alias de hostexample.come número de porta9001. Essa é a causa dos erros404.- Se você encontrar vários hosts virtuais que correspondam ao mesmo alias de host , acesse Resolução para resolver esse problema.
Resolução
- Verifique se cada host virtual contém apenas combinações exclusivas de alias de host e porta.
- Se você identificou vários hosts virtuais com o mesmo alias de host e combinações de porta então você deve atualizá-los com um alias de host exclusivo.
- É possível atualizar esses hosts usando a interface do Edge ou a API Management. As instruções podem ser encontradas em Modificar um host virtual.
- Verifique se cada alias de host tem uma entrada DNS adequada.
- 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" : [ ] }- É possível atualizar o host virtual incorreto para que eles não se sobreponham.
- Ou seja, atualize o alias de host como
example2.com. - 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" : [ ] }' -iHTTP/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" : [ ] }
- 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" } }
- 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, reúna as seguintes 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 de API
- Comando
curlcompleto para reproduzir o erro404 - Se os erros
404não estiverem ocorrendo no momento, forneça o período com as informações de fuso horário em que os erros404ocorreram no passado.
Se você for um usuário da nuvem privada, forneça as seguintes informações:
- Mensagem de erro completa observada para as solicitações com falha
- Nome da organização, do ambiente e do proxy de API para o qual você está observando
404erros - 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
404ocorreram