Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
Problème constaté
L'application cliente reçoit un code d'état HTTP 404 avec le message Not
Found et le message d'erreur Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH en réponse aux appels d'API.
Cette erreur signifie qu'Edge n'a pas pu trouver le proxy d'API pour l'hôte virtuel et le chemin spécifiés.
Message d'erreur
L'application cliente reçoit le code de réponse suivant :
HTTP/1.1 404 Not Found
En outre, vous pouvez observer un message d'erreur semblable à celui présenté ci-dessous :
{
"fault":{
"faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
"detail":{
"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
}
}
}Causes possibles
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| Hôte virtuel avec alias d'hôte en double | Plusieurs hôtes virtuels ont le même alias d'hôte et le même numéro de port. | Utilisateurs d'Edge Public Cloud et Private Cloud |
Étapes de diagnostic courantes
Les journaux NGINX et du processeur de messages seront utiles pour résoudre l'erreur 404.
Pour vérifier les journaux, procédez comme suit :
- Affichez les journaux NGINX à l'aide de la commande suivante :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Vérifiez les champs suivants dans les entrées du journal :
Champ Valeur Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundNotez l'ID du message dans les journaux.
- Consultez les journaux du processeur de messages
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)pour voir si vous avezmessaging.adaptors.http.flow.ApplicationNotFoundpour l'API spécifique ou si vous disposez de l'ID de message unique de l'étape 2 pour la requête d'API.Exemple de message d'erreur provenant du journal du processeur de messages
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)
Le journal ci-dessus indique le code d'erreur et le message d'erreur suivants :
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Cause : Plusieurs hôtes virtuels avec le même alias d'hôte et le même numéro de port
Les routeurs et les processeurs de messages Apigee Edge utilisent l'en-tête d'hôte, le numéro de port et les chemins d'URI
pour acheminer le trafic vers le proxy d'API approprié. Les définitions ambiguës, telles que plusieurs hôtes virtuels avec le même alias d'hôte et le même numéro de port, sont un anti-modèle documenté et peuvent entraîner des comportements inattendus. L'une des erreurs courantes que vous observerez est une
404 erreur avec le message Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH.
En règle générale, si plusieurs hôtes virtuels avec le même alias d'hôte existent, vous observerez
intermittentes 404 erreurs. En effet, le proxy d'API spécifique peut être configuré
pour accepter les requêtes sur un seul des hôtes virtuels. Lorsque les requêtes d'API sont acheminées vers l'
hôte virtuel spécifique configuré dans le proxy d'API, vous obtenez une réponse positive.
Toutefois, lorsque les requêtes d'API sont acheminées vers les autres hôtes virtuels pour lesquels le proxy d'API n'est
pas configuré pour accepter les requêtes, les API échouent avec ces 404
erreurs.
Suivez les instructions fournies dans
404 Impossible d'identifier le proxy pour l'hôte : <virtual host name> et l'URL : <path> et
résolvez cette erreur. Si aucune des causes n'entraîne cette erreur, procédez comme suit
pour déterminer si les hôtes virtuels avec des alias d'hôte en double sont à l'origine des 404
erreurs.
Diagnostic
Utilisez l'une des méthodes suivantes pour déterminer si plusieurs hôtes virtuels ont le
même alias d'hôte/numéro de port, ce qui entraîne des 404 erreurs :
- Interface utilisateur Edge
- API de gestion
Interface utilisateur Edge
Suivez ces instructions pour déterminer si plusieurs hôtes virtuels ont le même alias d'hôte/numéro de port à l'aide de l'interface utilisateur Edge.
Par exemple, si vous avez observé l'erreur 404 avec l'URL
http://example.com:9001/proxy1, vous devez trouver les hôtes virtuels qui ont
l'alias d'hôte example.com et le port 9001.
- Dans Public Cloud et la nouvelle interface utilisateur Edge sur Private Cloud:
- Sélectionnez Admin.
- Sélectionnez Hôtes virtuels.
- Pour chaque environnement , utilisez le filtre de recherche pour déterminer les hôtes virtuels qui correspondent à l'alias d'hôte spécifique avec lequel les requêtes d'API ont été appelées.
- Si vous trouvez plusieurs hôtes virtuels utilisant le même alias d'hôte , consultez la section Solution pour résoudre ce problème.
Exemple :

- Dans l'interface utilisateur classique sur Private Cloud:
- Sélectionnez l'onglet API .
- Sélectionnez Configuration de l'environnement.
- Sélectionnez Hôtes virtuels.
- Pour chaque environnement , consultez la liste des hôtes virtuels pour voir si l'un d'eux correspond à l'alias d'hôte spécifique avec lequel les requêtes d'API ont été appelées.
- Si vous trouvez plusieurs hôtes virtuels correspondant au même alias d'hôte , consultez la section Solution pour résoudre ce problème.
Exemple :

API de gestion
Suivez ces instructions pour déterminer si plusieurs hôtes virtuels ont le même alias d'hôte/numéro de port à l'aide des API de gestion.
Obtenez la définition de chacun des hôtes virtuels dans chacun des environnements de vos organisations pour voir quels hôtes virtuels ont le même alias d'hôte et le même numéro de port :
Par exemple, si vous avez observé l'erreur
404avec l'URLhttp://example.com:9001/proxy1, vous devez trouver les hôtes virtuels qui ont l'alias d'hôteexample.comet le port9001.Obtenir la liste des environnements
Utilisateur de Public Cloud :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Utilisateur de Private Cloud :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Où :
ORGANIZATION_NAME est le nom de l'organisation.
Exemple :
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Obtenir la liste des hôtes virtuels dans un environnement
Utilisateur de Public Cloud :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Utilisateur de Private Cloud :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Où :
ORGANIZATION_NAME est le nom de l'organisation.
ENVIRONMENT_NAME est le nom de l'environnement.
Exemple :
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Obtenir la définition de chacun des hôtes virtuels dans l'environnement.
Utilisateur de Public Cloud :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Utilisateur de Private Cloud :
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Où :
ORGANIZATION_NAME est le nom de l'organisation.
ENVIRONMENT_NAME est le nom de l'environnement.
VIRTUAL_HOST_NAME est le nom de l'hôte virtuel.
Exemple :
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" : [ ] }Répétez les deux étapes ci-dessus pour les autres environnements de votre organisation.
Dans cet exemple, répétez les étapes pour l'environnement
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" : [ ] }Dans cet exemple, vous pouvez voir que les deux hôtes virtuels
defaultdans deux environnements différents,testetdev, contiennent le même alias d'hôteexample.comet le même numéro de port9001. C'est la cause des erreurs404.- Si vous trouvez plusieurs hôtes virtuels correspondant au même alias d'hôte , consultez la section Solution pour résoudre ce problème.
Solution
- Assurez-vous que chaque hôte virtuel ne contient que des combinaisons uniques d'alias d'hôte et de port.
- Si vous avez identifié plusieurs hôtes virtuels avec les mêmes combinaisons d'alias d'hôte et de port vous devez les mettre à jour avec un alias d'hôte unique.
- Vous pouvez les mettre à jour à l'aide de l'interface utilisateur Edge ou de l'API Management. Pour obtenir des instructions, consultez la section Modifier un hôte virtuel.
- Assurez-vous que chaque alias d'hôte comporte une entrée DNS appropriée.
- Dans l'exemple ci-dessus, si notre configuration se présentait comme suit :
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" : [ ] }- Vous pouvez mettre à jour l'hôte virtuel incorrect afin qu'il ne se chevauche pas.
- Autrement dit, mettez à jour l'alias d'hôte en tant que
example2.com. - Assurez-vous que la nouvelle entrée DNS de l'alias d'hôte est semblable à celle de l'alias d'hôte précédent.
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" : [ ] }
- Effectuez à nouveau les appels d'API au proxy et vérifiez que vous obtenez des réponses positives de manière cohérente :
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" } }
- Si le problème persiste, consultez la page Vous devez collecter des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes , puis contactez l'assistance Apigee Edge :
Si vous êtes un utilisateur de Public Cloud, fournissez les informations suivantes :
- Nom de l'organisation
- Nom de l'environnement
- Nom de proxy d'API
- Commande
curlcomplète pour reproduire l'erreur404 - Si les erreurs
404ne se produisent pas actuellement, indiquez la période avec les informations de fuseau horaire au cours de laquelle les erreurs404se sont produites par le passé.
Si vous êtes un utilisateur de Private Cloud, fournissez les informations suivantes :
- Message d'erreur complet observé pour les requêtes ayant échoué
- Nom de l'organisation, de l'environnement et du proxy d'API pour lesquels vous observez
404erreurs - Bundle de proxy d'API
- Journaux d'accès NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Journaux du processeur de messages
/opt/apigee/var/log/edge-message-processor/logs/system.log - Période avec les informations de fuseau horaire au cours de laquelle les erreurs
404se sont produites