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.TooBigLine
in risposta alle chiamate API.
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 line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Possibili cause
Questo errore si verifica se la dimensione della riga di risposta inviata dal server di destinazione/backend su Apigee Il perimetro della risposta HTTP è superiore al limite massimo consentito limite in Apigee Edge.
Prima di esaminare le possibili cause di questo errore, vediamo cosa viene dalla riga di risposta e come verificarne le dimensioni.
Informazioni sulla riga di risposta
Una tipica risposta HTTP è composta da tre parti:
- Riga di stato (indicata come Riga di risposta in Apigee)
- ( Insieme di intestazioni HTTP)
- [ Corpo ]
La riga di risposta è costituita da tre parti: la versione del protocollo seguita da un numero codice di stato e la frase testuale associata, come illustrato di seguito:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
Quando una risposta HTTP viene inviata dall'applicazione server di destinazione/backend, la prima riga
inviate rappresenta la riga di risposta come descritto sopra. Segue il
intestazioni e corpo della risposta/payload.Il seguente screenshot di esempio mostra un tipico
curl
, la parte Richiesta e la parte Risposta (insieme alla
Riga di risposta).
Informazioni sulle dimensioni della riga di risposta
Nell'esempio illustrato in precedenza, anche la riga iniziale (prima riga) nella risposta denominata Riga di risposta è la seguente:
HTTP/1.1 200 OK
Questa riga di risposta ha una dimensione di
~15 bytes
poiché contiene15 ASCII characters
. Poiché questo rientra tra i limite consentito in Apigee Edge, la risposta viene inviata al client senza di Apigee Edge.- Analogamente, se osservi il
faultstring
Messaggio di errore mostrato sopra, contiene"response line size exceeding 2,048"
. Questo indica che la riga di risposta nella risposta HTTP inviati dal server di destinazione/backend hanno superato i 2.048 byte.
Informazioni sulla riga di risposta grande
In base alla definizione di Status-Line (denominata qui Response-Line), le tipiche richieste HTTP e risposta, la dimensione sarebbe molto inferiore al limite predefinito di 2 K definito in Apigee Edge, quindi potremmo non hai raggiunto il limite. Tuttavia, ecco alcuni possibili scenari in cui potresti superare questo limite:
- Il server di destinazione/backend non è un sistema HTTP. Potrebbe rispondere con un indirizzo non HTTP risposta.
- Il server di destinazione/backend riscontra dei problemi e invia una lunga riga di risposta come parte del protocollo risposta.
Scopri di più in merito in Errore protocollo.http.TooBigLine, "dimensione riga di risposta superiore a 2.048.
Di seguito sono riportate le possibili cause dell'errore:
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Le dimensioni della riga di risposta sono superiori al limite consentito | La dimensione della riga di risposta inviata dal server di destinazione/backend come parte La risposta HTTP di Apigee Edge è superiore a 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:
- Accedi alla UI di Apigee Edge come utente con ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai al menu Analizza > Monitoraggio delle API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
- Puoi selezionare il filtro Proxy per restringere il codice di errore.
- Traccia il codice di errore in base all'ora.
Seleziona una cella con il codice di errore
protocol.http.TooBigLine
come mostrato di seguito:Verranno visualizzate le informazioni sul codice di errore
protocol.http.TooBigLine
come mostrato di seguito:Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
- Nella finestra Log, tieni presente i seguenti dettagli:
- .
- Codice di stato:
502
- Origine errore:
target
- Codice di errore:
protocol.http.TooBigLine
.
- Codice di stato:
- Se Origine di errore presenta il valore
target
e l'errore Code ha il valoreprotocol.http.TooBigLine
, questo indica che la risposta HTTP dal server di destinazione/ backend ha una dimensione della riga di risposta maggiore di il limite massimo consentito in Apigee Edge.
Strumento Trace
- Attiva la sessione di traccia
e:
- .
- Attendi che si verifichi l'errore
502 Bad Gateway
. o - Se riesci a riprodurre il problema, effettua la chiamata API e riproduci l'errore
502 Bad Gateway
.
- Attendi che si verifichi l'errore
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
In genere l'errore è visualizzato in
flowinfo
Errore Dopo la fase Richiesta inviata al server di destinazione, come illustrato di seguito:Prendi nota dei valori dell'errore della traccia:
- errore:
response line exceeding 2,048
- 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 della riga di risposta superando il limite consentito.
- errore:
Visualizzerai il messaggio di errore inviato al cliente nella casella Risposta inviata a Fase client come illustrato di seguito:
- Prendi nota dei valori dell'errore della traccia:
- Errore:
502 Bad Gateway
. - Contenuti relativi all'errore:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- Errore:
Puoi anche accedere alla fase AX (Analytics Data Recorded) nella traccia. e fai clic per visualizzare i dettagli dell'errore.
( visualizza immagine ingrandita)
Prendi nota del valore di quanto segue:
Intestazioni delle richieste Valore X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Contenuti dell'errore : corpo {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
Per diagnosticare l'errore utilizzando i log di accesso NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per
determinare le informazioni chiave sugli errori HTTP
502
. 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.
- Cerca per vedere se si sono verificati
502
errori durante un intervallo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che non vanno a buon fine502
. Se riscontri errori
502
con il codice X-Apigee-fault-code corrispondente al valore diprotocol.http.TooBigLine
, quindi determina il valore della X-Apigee-fault-source.La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X- Codice di errore Apigee e fonte-fault-X-Apigee:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
Causa: le dimensioni della riga di risposta sono superiori al limite consentito
Diagnosi
- Determinare il codice di errore e l'origine errore per l'errore osservato utilizzando l'API Monitoraggio, log di accesso dello strumento Trace o NGINX come spiegato in Passaggi comuni per la diagnosi.
- Se il campo Origine errore ha il valore
target
, significa che La dimensione della riga di risposta inviata dall'applicazione server di destinazione/backend ad Apigee è maggiore di limite consentito in Apigee Edge. Puoi verificare che la dimensione della riga di risposta abbia superato il limite consentito di 2 kB utilizzando una 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, fai riferimento alle
faultstring
.Esempio di messaggio di errore:
"faultstring":"response line size exceeding 2,048"
Il valore
faultstring
sopra indicato indica che le dimensioni della riga di risposta hanno superato il limite consentito di 2 kB.Richiesta effettiva
Per eseguire la convalida utilizzando la richiesta effettiva:
Se hai accesso alla richiesta effettiva fatta al server di destinazione/backend applicazione, svolgi i passaggi che seguono:
- Verifica le dimensioni della riga di risposta
- Se noti che la dimensione dell'URI è superiore a
limite consentito in Apigee Edge, è la causa
risolvere il problema.
Esempio di risposta dal server di destinazione/backend:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
Nel caso precedente, la riga di risposta
HTTP/1.1 200 1111…<trimmed>...11111111
è più grande di 2 kB, ovvero contiene più di 2000 caratteri ASCII.Se utilizzi un altro client, puoi esaminare i log del client e provare per scoprire le dimensioni della riga di risposta inviata ad Apigee Edge.
Log del processore di messaggi
Per eseguire la convalida utilizzando i log del processore di messaggi:
Se sei un utente Private Cloud, puoi utilizzare i log del processore di messaggi per verificare se le dimensioni della riga di risposta hanno superato limite consentito in Apigee Edge.
- Determinare l'ID messaggio della richiesta non riuscita utilizzando API Monitoring, lo strumento Trace o NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
Cerca l'ID messaggio nel log del processore di messaggi:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Troverai linee da
system.log
simili alle seguenti:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
Il testo
message = response line size exceeding 2,048
in alto indica che le dimensioni della riga di risposta sono superiori a 2 kB. Pertanto, Apigee Edge genera l'eccezione e restituisce un codice di stato502
con il codice di erroreprotocol.http.TooBigline
alle applicazioni client.
Risoluzione
Correggi dimensioni
Opzione 1 [consigliata]: correggi l'applicazione del server di destinazione/backend per non inviare Righe di risposta di dimensioni superiori al limite consentito
- Analizza il motivo per cui il client specifico invia una riga di risposta di dimensioni maggiori rispetto al limite consentito come definito in Limiti.
- Se non lo è, modifica l'applicazione del server di destinazione/backend in modo che invia una riga di risposta di dimensioni inferiori al limite consentito.
- Se è il caso e si vuole inviare una riga di risposta di dimensioni superiori a limite consentito, vai alle opzioni successive.
CwC
Opzione 2: utilizza la proprietà CwC per aumentare il limite della riga di risposta
Apigee offre un servizio CwC che le consente di aumentare il limite di dimensione della riga di risposta. Per maggiori dettagli, vedi Imposta il limite della riga di risposta sul processore di messaggi.
Limiti
Apigee si aspetta che l'applicazione client e il server di backend non inviino righe di richiesta/risposta le cui dimensioni sono superiori al limite consentito come documentato per il limite di righe di richiesta/risposta in Apigee Edge Limits.
- Se sei un utente del cloud pubblico, il limite massimo per richieste e La dimensione della riga di risposta è quella documentata per le dimensioni della riga di richiesta/risposta in Limiti di Apigee Edge.
- Se sei un utente Private Cloud , potresti aver modificato il valore massimo predefinito limite per le dimensioni delle righe di richiesta e risposta (anche se non è una pratica consigliata). Per determinare il limite massimo della dimensione della riga di 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.line.limit
abbia
è stato aggiornato con un nuovo valore
per i processori di messaggi.
- Cerca la proprietà sul computer
HTTPResponse.line.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.line.limit" /opt/apigee/edge-message-processor/conf
- Il risultato di esempio dal comando precedente è il seguente:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
Nell'output di esempio sopra riportato, puoi notare che la proprietà
HTTPResponse.line.limit
è stato impostato con il valore2k
inhttp.properties
.Questo indica che il limite per le dimensioni della riga di risposta configurata in Apigee per i servizi privati Cloud è di 2 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
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'errore502
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