Errore interno del server 500: server di backend

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Video

Video Descrizione
500 Internal Server Error - caused by backend Mostra un errore 500 Internal Server Error in tempo reale causato dal server di backend, insieme ai passaggi per risolvere il problema.

Sintomo

L'applicazione client riceve un codice di stato HTTP 500 con il messaggio Internal Server Error come risposta alle chiamate API.

Il codice di stato HTTP 500 è una risposta di errore generica. Significa che il server ha riscontrato una condizione imprevista che gli ha impedito di soddisfare la richiesta. In genere, questo errore viene restituito dal server quando non è adatto nessun altro codice di errore.

Messaggi di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 500 Internal Server Error

Inoltre, potresti visualizzare un messaggio di errore simile a quello mostrato di seguito:

Esempio n. 1

Risposta del server di backend di esempio n. 1

{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}

Esempio n. 2

Risposta del server di backend di esempio n. 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>

Possibili cause

Il 500 Internal Server Error potrebbe essere restituito dal server di backend per diversi motivi. Questa guida pratica spiega come risolvere questo errore, indipendentemente dalla causa, utilizzando passaggi comuni.

Di seguito sono riportate le possibili cause di questo problema:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Errore nel server di backend Il server di backend potrebbe non funzionare per qualche motivo. Utenti di Edge Private e Public Cloud

Passaggi comuni per la diagnosi

Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:

Monitoraggio delle API

Procedura n. 1: utilizzo del monitoraggio delle API

Per diagnosticare l'errore utilizzando il monitoraggio delle API:

  1. Accedi all'interfaccia utente di Apigee Edge come utente con un ruolo appropriato.
  2. Passa all'organizzazione in cui vuoi esaminare il problema.

  3. Vai alla pagina Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Traccia il codice di errore rispetto al tempo.

  6. Seleziona una cella con il codice di errore messaging.adaptors.http.flow.ErrorResponseCode come mostrato di seguito:

    ( vedi immagine più grande)

  7. Le informazioni sul codice di errore messaging.adaptors.http.flow.ErrorResponseCode vengono visualizzate come mostrato di seguito:

    ( vedi immagine più grande)

  8. Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.

    ( vedi immagine più grande)

  9. Nella finestra Log, prendi nota dei seguenti dettagli:
    • ID messaggio richiesta
    • Codice di stato: 500
    • Origine errore: target
    • Codice di errore: messaging.adaptors.http.flow.ErrorResponseCode

Traccia

Procedura n. 2: utilizzo dello strumento Traccia

Per diagnosticare l'errore utilizzando lo strumento Traccia:

  1. Attiva la sessione di traccia e
    • Attendi che si verifichi l'errore 500 Internal Server Error con il codice di errore messaging.adaptors.http.flow.ErrorResponseCode oppure
    • Se riesci a riprodurre il problema, effettua la chiamata API per riprodurre l'errore 500 Internal Server Error
  2. Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia attivata:

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  5. In genere, l'errore si verifica in un flusso dopo la fase Risposta ricevuta dal server di destinazione come mostrato di seguito:

    ( vedi immagine più grande)

  6. Vai alla fase AX (dati di Analytics registrati) nella traccia e fai clic su di essa.
  7. Scorri verso il basso fino alla sezione Intestazioni della risposta Dettagli fase e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source e X-Apigee-Message-ID, come mostrato di seguito:

    ( vedi immagine più grande)

  8. Prendi nota dei valori di X-Apigee-fault-code, X-Apigee-fault-source, e X-Apigee-Message-ID:
  9. Intestazioni della risposta Valore
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Procedura n. 3: utilizzo dei log degli accessi di NGINX

Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:

  1. Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave sull'errore HTTP 500 Internal Server Error.
  2. Controlla i log degli accessi di NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Cerca se sono presenti errori 500 con il codice di errore messaging.adaptors.http.flow.ErrorResponseCode durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno a buon fine con 500.
  4. Se trovi errori 500 con X-Apigee-fault-code corrispondente al valore di messaging.adaptors.http.flow.ErrorResponseCode, allora determina il valore di X-Apigee-fault-source.

    Esempio di errore 500 dal log degli accessi di NGINX:

    ( vedi immagine più grande)

    La voce di esempio riportata sopra dal log degli accessi di NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-source:

    Intestazioni Valore
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target

Causa: errore nel server di backend

Diagnosi

L'500 Internal Server Error restituito dal server di backend può essere causato da diversi motivi. Dovrai diagnosticare ogni situazione in modo indipendente.

  1. Determina il codice di errore e l'origine dell'errore osservato utilizzando il monitoraggio delle API, lo strumento Traccia o i log degli accessi di NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se l'origine dell'errore è target e il codice di errore è messaging.adaptors.http.flow.ErrorResponseCode, significa che l'errore viene restituito dal server di backend.
  3. Puoi utilizzare uno dei seguenti passaggi per diagnosticare la causa del problema:

    Traccia

    Utilizzo di Traccia:

    Se hai una sessione di traccia per l'errore, segui questi passaggi:

    1. Nella traccia, seleziona la richiesta API che non è andata a buon fine con 500 Internal Server Error.
    2. Seleziona la fase Risposta ricevuta dal server di destinazione dalla richiesta API non riuscita, come mostrato nella figura seguente:

      ( vedi immagine più grande)

    3. Scorri verso il basso fino alla sezione Dettagli fase e controlla il Contenuto della risposta, che contiene la risposta del server di backend.

      Contenuto della risposta di esempio:

      <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>

      Nella risposta riportata sopra, tieni presente che il messaggio di errore del server di backend è Not Authorised (Non autorizzato). Ciò indica che l'utente potrebbe aver inserito credenziali non valide e per questo motivo riceve questo errore.

    Chiama il server di backend

    Effettuare una chiamata diretta al server di backend:

    Puoi effettuare una chiamata diretta al server di backend e:

    • Verificare se ricevi la stessa 500 Internal Server Error risposta ricevuta quando la richiesta è stata effettuata tramite Apigee Edge
    • Controllare il messaggio di errore (risposta) ricevuto dal server di backend

    Segui questi passaggi per effettuare la chiamata diretta al server di backend:

    1. Assicurati di avere tutte le intestazioni, i parametri di query e le credenziali necessarie da passare al server di backend come parte della richiesta.
    2. Se il servizio di backend è accessibile pubblicamente, puoi utilizzare il curl comando, Postman o qualsiasi altro client REST e richiamare direttamente l'API del server di backend.
    3. Se il server di backend è accessibile solo dai processori di messaggi, puoi utilizzare il comando curl, Postman o qualsiasi altro client REST e richiamare direttamente l'API del server di backend dal processore di messaggi.

    4. Verifica se il servizio di backend restituisce effettivamente 500 Internal Server Error, controlla il messaggio di errore (risposta) restituito dal server di backend e determina la causa di questo errore.

    Log del server di backend

    Utilizzo dei log del server di backend

    1. Esamina i log del server di backend e prova a ottenere maggiori dettagli sull'errore e sulla sua causa.
    2. Se possibile, attiva la modalità di debug sul server di backend per ottenere maggiori dettagli sull'errore e la causa.
  4. Verifica se stai utilizzando il concatenamento di proxy nell'endpoint di destinazione specifico del proxy API non riuscito, ovvero se il server di destinazione/endpoint di destinazione richiama un altro proxy in Apigee Edge. Per determinarlo:

    1. Se hai la traccia della richiesta non riuscita, vai alla fase Richiesta inviata al server di destinazione e fai clic su Mostra Curl.

    2. Si apre la finestra Curl per la richiesta inviata al server di destinazione , da cui puoi determinare l'alias host del server di destinazione.
    3. Esamina l'endpoint di destinazione del proxy API e verifica se l'URL del server di backend o il nome host nel server di destinazione rimanda a un altro proxy o al tuo server di backend.
    4. Se l'alias host del server di destinazione rimanda a un alias host virtuale, si tratta di un concatenamento di proxy. In questo caso, devi ripetere tutti i passaggi precedenti per il proxy concatenato finché non determini la causa effettiva del 500 Internal Server Error. In questi casi, 500 Internal Server Error può verificarsi anche in altri proxy concatenati in altre fasi, che possono essere diagnosticati e risolti utilizzando le istruzioni fornite in questa guida pratica o nella guida pratica relativa all'errore 500 Internal Server Error.
    5. Se l'alias host del server di destinazione rimanda al tuo server di backend, vai a Risoluzione.

Risoluzione

Se viene accertato che l'errore 500 proviene dal server di backend, allora collabora con il team del server di backend per risolvere il problema in modo appropriato.

Nell'esempio discusso sopra, potrebbe essere necessario richiedere agli utenti di inserire credenziali valide per risolvere il problema.

Punti chiave da tenere presenti

  1. Il messaggio di errore effettivo restituito dal server di backend per 500 Internal Server Error può essere visualizzato solo se hai acquisito la sessione di traccia per le richieste non riuscite.
  2. Per motivi di sicurezza, la risposta del server di backend non verrà registrata nei log del monitoraggio delle API, nei log degli accessi di NGINX o nei log del processore di messaggi.
  3. Puoi esaminare i log del server di backend o attivare la modalità di debug sul backend per ottenere maggiori dettagli sull'500 Internal Server Error e/o visualizzare il messaggio di errore restituito dal server di backend.

Informazioni di diagnostica da raccogliere

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e contatta l'assistenza di Apigee Edge.

Se sei un utente di Public Cloud, fornisci le seguenti informazioni:

  • Nome organizzazione
  • Nome ambiente
  • Nome proxy API
  • Comando curl completo per riprodurre l'errore 500
  • File di traccia contenente le richieste con l'errore 500 Internal Server Error
  • Se gli errori 500 non si verificano attualmente, fornisci il periodo di tempo con le informazioni sul fuso orario in cui si sono verificati 500 in passato.

Se sei un utente di Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome dell'organizzazione, dell'ambiente e del proxy API per cui stai osservando 500 errori
  • Bundle del proxy API
  • File di traccia contenente le richieste con l'errore 500 Internal Server Error
  • Log degli accessi di NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dove: ORG, ENV, e PORT# vengono sostituiti con i valori effettivi.

  • Log di sistema del processore di messaggi /opt/apigee/var/log/edge-message-processor/logs/system.log
  • Il periodo di tempo con le informazioni sul fuso orario in cui si sono verificati gli errori 500.