502 Bad Gateway - TooBigHeaders

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

Sintomo

L'applicazione client riceve un codice di stato HTTP di 502 Bad Gateway con codice di errore protocol.http.TooBigHeaders come risposta alle chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 502 Bad Gateway

Inoltre, potresti visualizzare il seguente messaggio di errore:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Possibili cause

Questo errore si verifica se la dimensione totale delle intestazioni inviate dal server di destinazione/backend ad Apigee Edge come parte della risposta HTTP è maggiore del limite consentito consentito in Apigee Edge.

Ecco le possibili cause di questo errore:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili per
La dimensione delle intestazioni nella risposta è maggiore del limite consentito La dimensione dell'intestazione di una determinata intestazione o la somma delle dimensioni delle intestazioni di tutte le intestazioni inviate dal server di destinazione/backend come parte della risposta HTTP ad Apigee Edge è superiore al limite consentito in Apigee Edge. Utenti di Edge Public e Private Cloud

Passaggi comuni per la diagnosi

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

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 API > Esamina.
  4. Seleziona l'intervallo di tempo specifico in cui hai osservato gli errori.
  5. Puoi selezionare il filtro Proxy per restringere il codice di errore.
  6. Traccia Codice di errore rispetto a Ora.
  7. Seleziona una cella con il codice di errore protocol.http.TooBigHeaders come mostrato di seguito:

    ( vedi immagine più grande)

  8. Verranno visualizzate le informazioni sul codice di errore protocol.http.TooBigHeaders come mostrato di seguito:

    ( vedi immagine più grande)

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

    ( vedi immagine più grande)

  10. Nella finestra Log, prendi nota dei seguenti dettagli:
    • Codice di stato: 502
    • Origine errore: target
    • Codice di errore: protocol.http.TooBigHeaders.
  11. Se Origine errore ha il valore target e Codice di errore ha il valore protocol.http.TooBigHeaders, significa che la risposta HTTP del server di destinazione/ backend ha intestazioni la cui dimensione è maggiore del limite consentito in Apigee Edge.

Strumento Traccia

  1. Attiva la sessione di traccia e:
    1. Attendi che si verifichi l'errore 502 Bad Gateway oppure
    2. Se riesci a riprodurre il problema, effettua la chiamata API e riproduci l'errore 502 Bad Gateway.
  2. Seleziona una delle richieste non riuscite ed esamina la traccia.
  3. Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  4. In genere, questo errore viene visualizzato nel flusso denominato Errore subito dopo la Richiesta inviata al server di destinazione fase, come mostrato di seguito:

    ( vedi immagine più grande)

    Prendi nota dei valori dell'errore dalla traccia:

    • error: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Ciò indica che Apigee Edge (componente del processore di messaggi) genera l'errore non appena riceve la risposta dal server di backend a causa di una dimensione dell'intestazione che supera il limite consentito.

  5. L'errore verrà visualizzato nella risposta di errore Risposta inviata al client inviata da Apigee Edge, come mostrato di seguito:

    ( vedi immagine più grande)

  6. Prendi nota dei valori dell'errore dalla traccia. La traccia di esempio riportata sopra mostra:
    • Errore: 502 Bad Gateway.
    • Contenuto errore: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Vai alla fase AX (Dati di analisi registrati) nella traccia e fai clic su di essa per visualizzare i dettagli correlati.

    ( vedi immagine più grande)

    Prendi nota del valore di quanto segue:

    Intestazioni di errore Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Contenuto errore: corpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

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

  1. Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per determinare le informazioni chiave su HTTP 502 Bad Gateway.
  2. Controlla i log degli accessi NGINX:

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

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

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

    Esempio di errore 502 dal log degli accessi NGINX:

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

    Intestazioni di errore Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Causa: la dimensione delle intestazioni nella risposta è maggiore del limite consentito

Diagnosi

  1. Determina il Codice di errore, l'Origine errore e la Dimensione payload della risposta per l' errore osservato utilizzando il monitoraggio delle API, lo strumento Traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se Origine errore ha il valore target, significa che la risposta inviata da Apigee al server di destinazione/backend ha intestazioni la cui dimensione è maggiore del limite consentito in Apigee Edge.
  3. Puoi verificare che la risposta della destinazione/del backend abbia intestazioni la cui dimensione è maggiore del limite consentito utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Per la convalida utilizzando il messaggio di errore:

    Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, allora consulta faultstring. The faultstring indica che la dimensione dell'intestazione della risposta ha superato il limite consentito.

    Messaggio di errore di esempio:

    "faultstring":"response headers size exceeding 25,600"

    Nel messaggio di errore riportato sopra, nota in faultstring che la risposta ha intestazioni la cui dimensione totale supera il limite consentito.

    Richiesta effettiva

    Per la convalida utilizzando la richiesta effettiva:

    Se hai accesso alla richiesta effettiva inviata al server di destinazione/backend, segui questi passaggi:

    1. Se sei un utente di Public Cloud/Private Cloud, effettua una richiesta direttamente al server di backend dal server di backend stesso o da qualsiasi altra macchina da cui hai l'autorizzazione a effettuare la richiesta al server di backend.
    2. Se sei un utente di Private Cloud, puoi anche effettuare la richiesta a uno dei processori di messaggi del server di backend.
    3. Esamina la risposta ricevuta dal server di backend e, in particolare, calcola e verifica la dimensione totale delle intestazioni passate nella risposta.
    4. Se riscontri che la dimensione delle intestazioni nel payload della risposta è superiore al limite consentito in Apigee Edge, questa è la causa del problema.

      Risposta di esempio dal server di destinazione:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      Nell'esempio riportato sopra, Testheader1 e Testheader2 hanno dimensioni maggiori, il che è la causa di questo errore in quanto supera il limite consentito in Apigee Edge.

    Log del processore di messaggi

    Per la convalida utilizzando i log del processore di messaggi:

    Se sei un utente di Private Cloud, puoi utilizzare i log del processore di messaggi per verificare se la dimensione delle intestazioni della risposta ha superato il limite consentito in Apigee Edge.

    1. Controlla i log del processore di messaggi:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Cerca se sono presenti errori 502 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con 502. Puoi utilizzare la seguente stringa di ricerca:
      grep -ri "response headers size exceeding"
      
    3. Troverai righe da system.log simili alle seguenti. La dimensione delle intestazioni della risposta può variare nel tuo caso:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. Non appena il processore di messaggi riceve la risposta dal server di backend/destinazione e rileva che la dimensione totale delle intestazioni è maggiore di 25 kB, si arresta e genera l'errore:

      response headers size exceeding 25,600

      Ciò implica che la dimensione totale dell'intestazione è superiore a 25 kB e Apigee genera l'errore quando la dimensione inizia a superare il limite di 25 kB con il codice di errore come protocol.http.TooBigHeaders

Risoluzione

Correggi la dimensione

Opzione 1 [consigliata]: correggi l'applicazione del server di destinazione in modo che non invii dimensioni delle intestazioni che superano il limite di Apigee

  1. Analizza il motivo per cui il server di destinazione specifico invia una dimensione dell'intestazione della risposta superiore al limite consentito come definito in Limiti.
  2. Se non è auspicabile, modifica l'applicazione del server di backend in modo che invii le intestazioni della risposta la cui dimensione è inferiore al limite consentito in Apigee Edge.
  3. Verifica se le informazioni dell'intestazione possono essere inviate come parte del corpo della risposta.
  4. Se possibile, invia tutte le informazioni di grandi dimensioni che avevi pianificato di inviare come parte di l'intestazione nel corpo della risposta. In questo modo, non supererai il limite dell'intestazione della risposta.

CwC

Opzione 2 : utilizza la proprietà CwC per aumentare il limite di dimensione dell'intestazione della risposta

Apigee fornisce una proprietà CwC che consente di aumentare il limite di dimensione delle intestazioni della risposta. Per maggiori dettagli, vedi Configurare i limiti per il processore di messaggi

Limiti

Apigee si aspetta che l'applicazione client e il server di backend non inviino dimensioni delle intestazioni superiori al limite consentito, come documentato per la dimensione dell'intestazione della richiesta/risposta in Limiti di Apigee Edge.

  1. Se sei un utente di Public Cloud, il limite massimo per la dimensione delle intestazioni della richiesta e della risposta è documentato per la dimensione dell'intestazione della richiesta/risposta in Limiti di Apigee Edge.
  2. Se sei un utente di Private Cloud, potresti aver modificato il limite massimo predefinito per la dimensione delle intestazioni della richiesta e della risposta (anche se non è una pratica consigliata). Puoi determinare il limite massimo di dimensione dell'intestazione della risposta seguendo le istruzioni riportate in Come controllare il limite attuale.

Come controllare il limite attuale?

Questa sezione spiega come verificare che la proprietà HTTPResponse.headers.limit sia stata aggiornata con un nuovo valore nei processori di messaggi.

  1. Nella macchina del processore di messaggi, cerca la proprietà HTTPResponse.headers.limit nella /opt/apigee/edge-message-processor/conf directory e controlla il valore impostato, come mostrato di seguito:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Il risultato di esempio del comando riportato sopra è il seguente:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. Nell'output di esempio riportato sopra, nota che la proprietà HTTPResponse.headers.limit è stata impostata con il valore 25k in http.properties.

    Ciò indica che il limite per la dimensione del payload della risposta configurato in Apigee per Private Cloud è di 25 kB.

Se hai ancora bisogno dell'assistenza del supporto Apigee, vai a Raccogliere le informazioni di diagnostica.

Raccogliere le informazioni di diagnostica

Raccogli le seguenti informazioni di diagnostica e poi contatta il supporto Apigee Edge:

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

  • Nome organizzazione
  • Nome ambiente
  • Nome proxy API
  • Comando curl completo utilizzato per riprodurre l'errore 502
  • File di traccia per le richieste API
  • Output completo della risposta del server di destinazione/backend, insieme alla dimensione delle intestazioni

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

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome organizzazione
  • Nome ambiente
  • Bundle proxy API
  • File di traccia per le richieste API non riuscite
  • Comando curl completo utilizzato per riprodurre l'errore 502
  • Output completo della risposta del server di destinazione/backend, insieme alla dimensione delle intestazioni
  • Log degli accessi 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