502 Bad Gateway - TooBigHeaders

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

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

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 502 Bad Gateway

Potresti inoltre 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 target/backend ad Apigee Edge come parte della risposta HTTP è maggiore del limite consentito limite consentito in Apigee Edge.

Ecco le possibili cause di questo errore:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
La dimensione delle intestazioni della risposta supera il limite consentito La dimensione di un'intestazione specifica o la somma delle dimensioni 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 perimetrali di cloud pubblici e privati

Passaggi diagnostici comuni

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

Monitoraggio delle API

Per diagnosticare l'errore utilizzando API Monitoring:

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

  3. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Puoi selezionare il filtro Proxy per restringere il codice di errore.
  6. Traccia il codice di errore in base all'ora.
  7. Seleziona una cella con il codice di errore protocol.http.TooBigHeaders come mostrato di seguito:

    ( visualizza immagine ingrandita)

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

    ( visualizza immagine ingrandita)

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

    ( visualizza immagine ingrandita)

  10. Nella finestra Log, tieni presente i seguenti dettagli:
      .
    • Codice di stato: 502
    • Origine errore:target
    • Codice di errore: protocol.http.TooBigHeaders.
  11. Se Origine di errore presenta il valore target e l'errore Code ha il valore protocol.http.TooBigHeaders, questo indica che la risposta HTTP del server di destinazione o di backend presenta intestazioni di dimensioni maggiori rispetto al limite consentito in Apigee Edge.

Strumento Trace

  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. Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
  4. In genere, viene visualizzato questo errore nel flusso denominato Error (Errore) subito dopo il tag Fase Richiesta inviata al server di destinazione, come mostrato di seguito:

    ( visualizza immagine ingrandita)

    Prendi nota dei valori dell'errore della traccia:

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

    Questo indica che Apigee Edge (componente Processore di messaggi) genera l'errore come non appena riceve la risposta dal server di backend a causa delle dimensioni dell'intestazione superando il limite consentito.

  5. l'errore verrà visualizzato nel campo Risposta inviata al cliente risposta di errore inviata da Apigee Edge come mostrato di seguito:

    ( visualizza immagine ingrandita)

  6. Prendi nota dei valori dell'errore della traccia. La traccia di esempio riportata sopra mostra:
    • Errore: 502 Bad Gateway.
    • Contenuti relativi all'errore: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Vai alla fase AX (Analytics Data Recorded) nella traccia. e fai clic per visualizzare i dettagli correlati.

    ( visualizza immagine ingrandita)

    Prendi nota del valore di quanto segue:

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

NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

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

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

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

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

    Esempio di errore 502 nel log di accesso NGINX:

    La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-code

    Intestazioni degli errori Valore
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

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

Diagnosi

  1. Stabilisci il codice di errore, l'origine errore e la dimensione payload di risposta per il parametro osservato utilizzando i log di monitoraggio delle API, dello strumento Trace o di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se Origine errore ha il valore target, significa che la risposta inviata dal server di destinazione/backend ad Apigee ha intestazioni la cui dimensione è maggiore rispetto al limite consentito in Apigee Edge.
  3. Puoi verificare che la risposta dal target/backend abbia intestazioni di dimensione superiore al limite consentito utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Per eseguire la convalida utilizzando il messaggio di errore:

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

    Esempio di messaggio di errore:

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

    Nel messaggio di errore riportato sopra, tieni presente nel faultstringche il risposta contiene intestazioni le cui dimensioni totali superano il limite consentito.

    Richiesta effettiva

    Per eseguire la convalida utilizzando la richiesta effettiva:

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

    1. Se sei un utente di un cloud pubblico/un cloud privato, effettua una richiesta direttamente al server di backend dallo stesso server di backend o da qualsiasi macchina da cui è consentito effettuare la richiesta al backend server web.
    2. Se sei un utente del Private Cloud, puoi anche inviare la richiesta a il server di backend da uno dei processori di messaggi.
    3. Esamina la risposta ricevuta dal server di backend e, in particolare, calcolare e verificare la dimensione totale delle intestazioni passate nella risposta.
    4. Se noti che la dimensione delle intestazioni nel payload di risposta è superiore al limite consentito in Apigee Edge, questa è la causa del problema.

      Esempio di risposta 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 precedente, Testheader1 e Le dimensioni di Testheader2 sono superiori, motivo per cui per questo errore in quanto supera il limite consentito in Apigee Edge

    di Gemini Advanced.

    Log del processore di messaggi

    Per eseguire la convalida utilizzando i log del processore di messaggi:

    Se sei un utente del cloud privato, puoi utilizzare i log del processore di messaggi per verificare se la dimensione delle intestazioni della risposta ha superato 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 ci sono errori 502 durante un intervallo specifico durata (se il problema si è verificato in passato) o se sono presenti richieste non funziona ancora con 502. Puoi utilizzare la seguente stringa di ricerca:
      grep -ri "response headers size exceeding"
      
    3. Troverai linee da system.log simili alla seguente. La dimensione delle intestazioni delle risposte può variare a seconda del 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 backend/destinazione server web e rileva che la dimensione totale delle intestazioni è superiore a 25 kB, si interrompe e genera l'errore:

      response headers size exceeding 25,600

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

Risoluzione

Correggi dimensioni

Opzione 1 [consigliata]: correggi l'applicazione server di destinazione per non inviare le dimensioni delle intestazioni oltre il limite di Apigee

  1. Analizza il motivo per cui il server di destinazione specifico deve inviare più dimensioni dell'intestazione della risposta rispetto al limite consentito come definito in Limiti.
  2. Se non è appropriato, modifica l'applicazione del server di backend in modo che invii le intestazioni della risposta le cui dimensioni sono inferiori al limite consentito 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 pensavi di inviare come parte l'intestazione nel corpo della risposta. In questo modo avrai la certezza di non superare il numero di risposte massimo delle intestazioni.
di Gemini Advanced.

CwC

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

Apigee offre una CwC, che consente di aumentare il limite di dimensioni delle intestazioni di risposta. Per maggiori dettagli, vedi Configurazione dei limiti per il processore di messaggi

Limiti

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

  1. Se sei un utente del cloud pubblico, il limite massimo per Le dimensioni delle intestazioni delle richieste e delle risposte sono quelle documentate per le dimensioni dell'intestazione richiesta/risposta in Limiti di Apigee Edge.
  2. Se sei un utente Private Cloud , potresti aver modificato il valore massimo predefinito limite per le dimensioni delle intestazioni di richiesta e risposta (anche se non è una pratica consigliata). Per determinare il limite massimo di dimensioni dell'intestazione della risposta, segui le istruzioni riportate in Come controllare il limite attuale.

Come si controlla il limite attuale?

Questa sezione spiega come verificare che la proprietà HTTPResponse.headers.limit abbia è stato aggiornato con un nuovo valore per i processori di messaggi.

  1. Cerca la proprietà sul computer HTTPResponse.headers.limit in nella directory /opt/apigee/edge-message-processor/conf e controlla in vedi quale valore è stato impostato come mostrato di seguito:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Il risultato di esempio dal comando precedente è il seguente:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. Nell'output di esempio riportato sopra, tieni presente che la proprietà HTTPResponse.headers.limit è stato impostato con il valore 25k in http.properties.

    Questo indica che il limite per la dimensione del payload della risposta configurato in Apigee per i servizi privati Cloud è di 25 kB.

Se hai ancora bisogno di aiuto dall'assistenza Apigee, vai a Devi raccogliere dati diagnostici.

Raccogliere dati diagnostici

Raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:

Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:

  • Nome organizzazione
  • Nome ambiente
  • Nome proxy API
  • Completa il comando curl utilizzato per riprodurre l'errore 502
  • File di traccia per le richieste API
  • Output completo della risposta dal 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
  • Completa il comando curl utilizzato per riprodurre l'errore 502
  • Output completo della risposta dal server di destinazione/backend insieme alla dimensione delle intestazioni
  • Log di accesso NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

  • Log di sistema del processore di messaggi /opt/apigee/var/log/edge-message-processor/logs/system.log