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:
- 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, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Anote o ID da mensagem que aparece nos registros.
- 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
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
.
- Em Nuvem pública e Nova IU do Edge em nuvem privada:
- Selecione Administrador.
- Selecione Hosts virtuais.
- 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.
- Se você encontrar vários hosts virtuais usando o mesmo alias de host, acesse Resolução para resolver o problema.
Por exemplo:
- Em IU clássica na nuvem privada:
- Selecione a guia APIs .
- Selecione Configuração do ambiente.
- Selecione Hosts virtuais.
- 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.
- 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.
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 URLhttp://example.com:9001/proxy1
, você precisa descobrir quais têm o aliasexample.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" ]
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" : [ ] }
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
edev
, ambos contêm o mesmo alias de hostexample.com
e número da porta9001
. Essa é a causa dos erros404
.- Se você encontrar vários hosts virtuais correspondentes ao mesmo alias de host, acesse Resolução para resolver o 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 de host e porta você deve atualizá-los com um alias de host exclusivo.
- 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.
- 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" : [ ] }
- Você pode atualizar o host virtual incorreto para que eles não se sobreponham.
- Isso significa atualizar 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" : [ ] }' -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 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, 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 erro404
. - Se os erros
404
não estiverem ocorrendo atualmente, forneça o período com as informações de fuso horário quando erros404
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