Você está vendo a documentação do Apigee Edge.
Acesse a
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 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 este código de resposta:
HTTP/1.1 404 Not Found
Além disso, talvez você veja 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 de nuvens públicas e privadas de borda |
Etapas comuns do diagnóstico
Os registros do NGINX e do Processador de mensagens serão úteis na solução de problemas do erro 404
.
Siga estas etapas para verificar os registros:
- Acesse 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, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Anote o ID da mensagem dos registros.
- Verifique os registros do processador de mensagens (
/opt/apigee/var/log/edge-message-processor/logs/system.log)
) para ver se você temmessaging.adaptors.http.flow.ApplicationNotFound
para a API específica ou se tem o ID da 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 a seguir:
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 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á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ê observará é um erro 404
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ê notará erros 404
intermitentes. Isso ocorre porque o proxy da API específico pode ser configurado para aceitar as solicitações em apenas um dos hosts virtuais. Quando as solicitações de API forem encaminhadas para o
host virtual específico configurado no proxy de API, você receberá uma resposta bem-sucedida.
No entanto, quando as solicitações de API forem roteadas para outros hosts virtuais em que o proxy da API não está configurado para aceitar as solicitações, as APIs falharão com esses erros 404
.
Siga as instruções fornecidas em
404 Não foi possível identificar o proxy para o host: <nome do host virtual> e URL: <caminho> e
resolva este erro. Se nenhuma das causas estiver gerando esse erro, use as etapas abaixo para determinar se hosts virtuais com aliases de host duplicados estão causando os erros 404
.
Diagnóstico
Use um dos métodos a seguir para determinar se há vários hosts virtuais com o mesmo alias/porta de host que leva a erros 404
:
- 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/porta de host usando a IU do Edge.
Por exemplo, se você observou o erro 404
com o URL
http://example.com:9001/proxy1
, precisará descobrir quais hosts virtuais têm
o alias de host example.com
e a porta 9001
.
- Em Nuvem pública e nova interface do Edge na nuvem privada:
- Selecione Administrador.
- Selecione Virtual Hosts.
- Para cada Ambiente, use o filtro de pesquisa para determinar os Hosts virtuais que correspondem ao alias do host específico com que as solicitações da API foram invocadas.
- Se você encontrar vários hosts virtuais usando o mesmo alias de host, acesse Resolução para resolver esse problema.
Exemplo:
- Em IU clássica na nuvem privada:
- Selecione a guia APIs .
- Selecione Configuração do ambiente.
- Selecione Virtual Hosts.
- Para cada Environment, confira a lista de Virtual Hosts para verificar se algum deles corresponde ao Alias do host específico com que as solicitações da API foram invocadas.
- Se você encontrar vários hosts virtuais correspondentes 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/porta de host usando as APIs de gerenciamento.
Receba a definição de cada um dos hosts virtuais em cada um dos ambientes das suas 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 URLhttp://example.com:9001/proxy1
, precisará descobrir quais hosts virtuais têm o alias de hostexample.com
e 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" ]
Acesse 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 ver que os dois hosts virtuais
default
em dois ambientes diferentes,test
edev
, contêm o mesmo alias de hostexample.com
e o mesmo número de porta9001
. Essa é a causa dos erros404
.- Se você encontrar vários hosts virtuais correspondentes 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 as mesmas combinações de alias e porta de host, atualize-os com um alias de host exclusivo.
- É possível atualizá-los usando a IU do Edge ou a API Management. As instruções podem ser encontradas em Como modificar um host virtual.
- Verifique se cada alias de host tem uma entrada DNS adequada.
- No exemplo discutido acima, se nossa configuração tivesse esta aparência:
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.
- Isso é atualizar o alias do host como
example2.com
. - Verifique se o novo alias de host tem uma entrada DNS semelhante à do alias 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" : [ ] }
- Faça as chamadas de API novamente para o proxy e verifique se você está recebendo respostas bem-sucedidas de maneira 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, colete as informações de diagnóstico a seguir 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
- Conclua o comando
curl
para reproduzir o erro404
. - Se os erros
404
não estiverem ocorrendo no momento, forneça o período com as informações de fuso horário em que os erros404
ocorreram no passado.
Se você for um usuário da nuvem privada, forneça as seguintes informações:
- Concluir a mensagem de erro observada para as solicitações com falha
- Organização, nome do ambiente e nome do proxy de API em que você está observando
erros
404
- 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 ocorreram os erros
404