Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
Vidéos
| Vidéo | Description |
|---|---|
| 500 Erreur interne du serveur : causée par le backend | Présente un 500 Internal Server Error en temps réel causé par le serveur backend, ainsi que les étapes à suivre pour résoudre le problème. |
Problème constaté
L'application cliente reçoit un code d'état HTTP 500 avec le message
Internal Server Error en réponse aux appels d'API.
Le code d'état HTTP 500 est une réponse d'erreur générique. Cela signifie que le serveur
a rencontré une condition inattendue qui l'a empêché de traiter la requête. Cette erreur est
généralement renvoyée par le serveur lorsqu'aucun autre code d'erreur n'est approprié.
Messages d'erreur
L'application cliente reçoit le code de réponse suivant :
HTTP/1.1 500 Internal Server Error
De plus, vous pouvez observer un message d'erreur semblable à celui présenté ci-dessous :
Exemple 1
Exemple de réponse du serveur backend 1
{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}Exemple 2
Exemple de réponse du serveur backend 2
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
Causes possibles
L'500 Internal Server Error peut être renvoyée par le serveur backend pour plusieurs raisons. Ce guide explique comment résoudre ce
problème en suivant des étapes courantes, quelle que soit sa cause.
Les causes possibles de ce problème sont les suivantes :
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| Erreur dans le serveur backend | Le serveur backend peut échouer pour une raison quelconque. | Utilisateurs d'Edge Private Cloud et Public Cloud |
Étapes de diagnostic courantes
Utilisez l'un des outils/techniques suivants pour diagnostiquer cette erreur :
Surveillance des API
Procédure 1 : Utiliser la surveillance des API
Pour diagnostiquer l'erreur à l'aide de la surveillance des API :
- Connectez-vous à l'interface utilisateur Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Basculez vers l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Examiner).
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Tracez le code d'erreur par rapport à l'heure.
Sélectionnez une cellule contenant le code d'erreur
messaging.adaptors.http.flow.ErrorResponseCodecomme illustré ci-dessous :
Les informations sur le code d'erreur
messaging.adaptors.http.flow.ErrorResponseCodes'affichent comme suit :
Cliquez sur View logs (Afficher les journaux), puis développez la ligne de la requête ayant échoué.
- Dans la fenêtre Logs (Journaux), notez les informations suivantes :
- ID du message de requête
- Code d'état :
500 - Source de l'erreur :
target - Code d'erreur :
messaging.adaptors.http.flow.ErrorResponseCode
Trace
Procédure 2 : Utiliser l'outil Trace
Pour diagnostiquer l'erreur à l'aide de l'outil Trace :
- Activez la session de trace et
- attendez que l'erreur
500 Internal Server Erroravec le code d'erreurmessaging.adaptors.http.flow.ErrorResponseCodese produise, ou - si vous pouvez reproduire le problème, effectuez l'appel d'API pour reproduire le problème
500 Internal Server Error
- attendez que l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher toutes les informations de flux) est activée :

- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourez les différentes phases de la trace et identifiez l'endroit où l'échec s'est produit.
L'erreur se trouve généralement dans un flux après la phase Response received from target server (Réponse reçue du serveur cible), comme illustré ci-dessous :

- Accédez à la phase AX (Données d'analyse enregistrées) de la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section Phase Details Response Headers (En-têtes de réponse des détails de la phase), puis déterminez les valeurs de X-Apigee-fault-code , X-Apigee-fault-source et X-Apigee-Message-ID , comme illustré ci-dessous :

- Notez les valeurs de X-Apigee-fault-code, X-Apigee-fault-source, et X-Apigee-Message-ID :
| En-têtes de réponse | Valeur |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
Procédure 3 : Utiliser les journaux d'accès NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX :
- Si vous êtes un utilisateur de Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour déterminer
les informations clés sur l'erreur HTTP
500 Internal Server Error. Consultez les journaux d'accès NGINX :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Recherchez les erreurs
500avec le code d'erreurmessaging.adaptors.http.flow.ErrorResponseCodependant une durée spécifique (si le problème s'est produit dans le passé) ou si des requêtes échouent toujours avec500. Si vous trouvez des erreurs
500avec le X-Apigee-fault-code correspondant à la valeurmessaging.adaptors.http.flow.ErrorResponseCode, déterminez la valeur de X-Apigee-fault-source.Exemple d'erreur 500 dans le journal d'accès NGINX :
L'entrée d'exemple ci-dessus du journal d'accès NGINX comporte les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :
En-têtes Valeur X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCodeX-Apigee-fault-source target
Cause : erreur dans le serveur backend
Diagnostic
L'500 Internal Server Error renvoyée par le serveur backend peut être
due à plusieurs raisons. Vous devrez diagnostiquer chaque situation indépendamment.
- Déterminez le code d'erreur et la source de l'erreur pour l'erreur observée à l'aide de la surveillance des API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes.
- Si la source de l'erreur est
targetet que le code d'erreur estmessaging.adaptors.http.flow.ErrorResponseCode, cela indique que l'erreur est renvoyée par le serveur backend. - Vous pouvez suivre l'une des étapes suivantes pour diagnostiquer la cause du problème :
Trace
Utiliser Trace :
Si vous disposez d'une session de trace pour l'échec, procédez comme suit :
- Dans la trace, sélectionnez la requête d'API qui a échoué avec
500 Internal Server Error. Sélectionnez la phase Response received from target server (Réponse reçue du serveur cible) de la requête d'API ayant échoué comme illustré dans la figure ci-dessous :
Faites défiler la page jusqu'à la section Phase Details (Détails de la phase), puis vérifiez le contenu de la réponse, qui contient la réponse du serveur backend.
Exemple de contenu de réponse :
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
Dans la réponse ci-dessus, notez que le message d'erreur du serveur backend est Non autorisé. Cela indique que l'utilisateur a peut-être transmis des identifiants non valides et que c'est pourquoi il reçoit cette erreur.
Appeler le serveur backend
Effectuer un appel direct au serveur backend :
Vous pouvez effectuer un appel direct au serveur backend et :
- vérifier si vous obtenez la même
500 Internal Server Errorréponse que celle reçue lorsque la requête a été effectuée via Apigee Edge ; - vérifier le message d'erreur (réponse) reçu du serveur backend.
Pour effectuer l'appel direct au serveur backend, procédez comme suit :
- Assurez-vous de disposer de tous les en-têtes, paramètres de requête et identifiants requis qui doivent être transmis au serveur backend dans le cadre de la requête.
- Si le service de backend est accessible publiquement, vous pouvez utiliser la
curlcommande, Postman ou tout autre client REST, et appeler directement l' API du serveur backend. Si le serveur backend n'est accessible qu'à partir des processeurs de messages, vous pouvez utiliser la commande
curl, Postman ou tout autre client REST, et appeler directement l'API du serveur backend à partir du processeur de messages.- Vérifiez si le service de backend renvoie bien
500 Internal Server Error, puis examinez le message d'erreur (réponse) renvoyé par le serveur backend et déterminez la cause de cette erreur.
Journaux du serveur backend
Utiliser les journaux du serveur backend
- Consultez les journaux du serveur backend et essayez d'obtenir plus de détails sur l'erreur et sa cause.
- Si possible, activez le mode débogage sur le serveur backend pour obtenir plus de détails sur l'erreur et sa cause.
- Dans la trace, sélectionnez la requête d'API qui a échoué avec
Vérifiez si vous utilisez le chaînage de proxy dans le point de terminaison cible spécifique du proxy d'API défaillant, c'est-à-dire si le serveur cible/point de terminaison cible appelle un autre proxy dans Apigee Edge. Pour le déterminer :
Si vous disposez de la trace de la requête ayant échoué, accédez à la phase Request sent to target server (Requête envoyée au serveur cible), puis cliquez sur Show Curl (Afficher Curl).
- La fenêtre Curl for Request Sent to Target Server (Curl pour la requête envoyée au serveur cible) s'ouvre. Vous pouvez y déterminer l'alias d'hôte du serveur cible.
- Examinez le point de terminaison cible de votre proxy d'API et vérifiez si l'URL du serveur backend ou le nom d'hôte du serveur cible pointe vers un autre proxy ou vers votre propre serveur backend.
- Si l'alias d'hôte du serveur cible pointe vers un alias d'hôte virtuel, il
s'agit d'un chaînage de proxy. Dans ce cas, vous devez répéter toutes les étapes ci-dessus pour le
proxy chaîné jusqu'à ce que vous déterminiez la cause réelle de la
500 Internal Server Error. Dans ces cas,500 Internal Server Errorpeut se produire dans d'autres proxys chaînés à d'autres étapes, qui peuvent être diagnostiqués et résolus à l'aide des instructions fournies dans ce guide ou dans le guide 500 Erreur interne du serveur. - Si l'alias d'hôte du serveur cible pointe vers votre serveur backend, passez à la section Solution.
Solution
S'il est établi que l'erreur 500 provient du serveur backend, alors
collaborez avec votre équipe de serveur backend pour résoudre le problème de manière appropriée.
Dans l'exemple ci-dessus, vous devrez peut-être demander aux utilisateurs de transmettre des identifiants valides pour résoudre ce problème.
Points importants à retenir
- Le message d'erreur réel renvoyé par le serveur backend pour
500 Internal Server Errorne peut être affiché que si vous avez capturé la session de trace pour les requêtes ayant échoué. - La réponse du serveur backend ne sera pas enregistrée dans la surveillance des API, les journaux d'accès NGINX ni les journaux du processeur de messages pour des raisons de sécurité.
- Vous pouvez consulter les journaux du serveur backend ou activer le mode débogage sur le backend pour obtenir plus de
détails sur le
500 Internal Server Erroret/ou afficher le message d'erreur renvoyé par le serveur backend.
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 et 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 du proxy d'API
- Commande
curlcomplète pour reproduire l'erreur500 - Fichier de trace contenant les requêtes avec
500 Internal Server Error - Si les erreurs
500ne se produisent pas actuellement, indiquez la période avec les informations de fuseau horaire au cours de laquelle les erreurs500se sont produites dans 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
500erreurs - Bundle de proxy d'API
- Fichier de trace contenant les requêtes avec
500 Internal Server Error - Journaux d'accès NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logOù : ORG, ENV, et PORT# sont remplacés par des valeurs réelles.
- Journaux système 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
500se sont produites.