Come posso risolvere gli errori HTTP 502 di Application Load Balancer?

Ultimo aggiornamento: 17-05-2022

Continuo a ricevere errori HTTP 502 con il mio Application Load Balancer. In che modo è possibile risolvere il problema?

Breve descrizione

Esistono diverse cause possibili per gli errori HTTP 502: bad gateway (HTTP 502: gateway non valido) e l'origine è da ricercarsi nella destinazione o nell'Application Load Balancer. È possibile utilizzare i parametri di Amazon CloudWatch e i registri di accesso per identificare l'origine e la causa dell'errore.

Prima di iniziare a risolvere l'errore dall'Application Load Balancer, assicurati di abilitare la registrazione degli accessi. Per i dettagli sul significato di ciascun campo nel registro di accesso, consulta Voci dei log di accesso.

Se la destinazione è una funzione AWS Lambda, consulta Risoluzione dei problemi relativi agli errori HTTP 502 quando la destinazione è una funzione Lambda nella sezione Risoluzione.

Risoluzione

Trova l'origine degli errori HTTP 502

Utilizzando i parametri di CloudWatch

Se i punti dati vengono visualizzati nel parametro HTTPCode_ELB_502_Count, l'origine degli errori HTTP 502 è da attribuire al bilanciatore del carico. Se vengono invece visualizzati nel parametro HTTP_Target_5XX_Count, l'origine risiederà nella destinazione.

Utilizzando i registri di accesso

Se il valore per elb_status_code è "502" e per target_status_code è "-", allora l'origine degli errori HTTP 502 è il bilanciatore del carico. Se il valore per elb_status_code è "502" e per target_status_code è "502", l'origine degli errori è la destinazione.

Risoluzioni dei problemi relativi agli errori HTTP 502

Nota: Filtra i registri di accesso con elb_status_code = "502" e target_status_code per individuare la causa. Quindi, completa i passaggi specifici per il tuo caso d'uso.

Il bilanciatore del carico ha ricevuto un RST TCP dalla destinazione durante il tentativo di connessione

Ricevere un RST TCP dalla destinazione quando si stabilisce una connessione indica che il bilanciatore del carico non può stabilire un handshake TCP a 3 vie con la destinazione. Di conseguenza, il bilanciatore del carico non è in grado di inoltrare la richiesta dell'utente alla destinazione.

  • Verifica se sono presenti punti dati per il parametro TargetConnectErrorCount. Questo parametro indica il numero di connessioni non stabilite correttamente tra il bilanciatore del carico e la destinazione.
  • Verifica se i campi request_processing_time, target_processing_time e response_processing_time nei registri di accesso sono impostati ciascuno sul valore -1. Questo valore indica che il bilanciatore del carico non è in grado di inviare la richiesta alla destinazione perché necessita di una connessione riuscita correttamente.

Di seguito è riportato un esempio di voce del registro di accesso:

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 -1 -1 -1 502 - 86 155 "GET http://example.com:80/ HTTP/1.1" 
"curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" Root=1-58337262-36d228ad5d99923122bbe354"

Nota: nella precedente voce del registro di accesso, request_processing_time, target_processing_time e response_processing_time sono impostati ciascuno su -1.

Il bilanciatore del carico ha ricevuto una risposta imprevista dalla destinazione, ad esempio "ICMP Destination unreachable (Host unreachable)" (Destinazione ICMP non raggiungibile (Host non raggiungibile)), durante il tentativo di connessione

  • Verifica se i campi request_processing_time, target_processing_time e response_processing_time nei registri di accesso sono tutti impostati sul valore -1.
  • Verifica se il traffico dalle sottoreti del bilanciatore del carico alle destinazioni è permesso sulla porta di destinazione.

La destinazione ha chiuso la connessione con un RST TCP o con un FIN TCP mentre il bilanciatore del carico aveva una richiesta in sospeso verso la destinazione

Il bilanciatore del carico riceve una richiesta e la inoltra alla destinazione. La destinazione riceve la richiesta e avvia l'elaborazione, ma chiude la connessione con il bilanciatore del carico con troppo anticipo. Ciò si verifica in genere quando la durata del timeout keep-alive per la destinazione è inferiore al valore del timeout di inattività del bilanciatore del carico. Assicurati che la durata del timeout keep-alive sia maggiore del valore del timeout di inattività.

Verifica i valori per i campi request_processing_time, target_processing_time e response_processing_time.

Esempio di voce del registro di accesso:

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.001 4.205 -1 502 - 94 326 "GET http://example.com:80 HTTP/1.1" "curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337262-36d228ad5d99923122bbe354"

Nota: nella voce del registro di accesso precedente, request_processing_time è fissato a 0,001, target_processing_time a 4,205 e response_processing_time a -1.

La risposta della destinazione non è conforme o contiene intestazioni HTTP non valide

Esegui un'acquisizione di pacchetti sulla destinazione per l'intervallo di tempo in cui si è verificato il problema, in modo da approfondire la risposta della destinazione.

Il bilanciatore del carico ha riscontrato un errore dell'handshake SSL o un timeout dell'handshake SSL (10 secondi) durante la connessione a una destinazione

La connessione TCP tra il bilanciatore del carico e il listener HTTPS della destinazione è stata eseguita con successo, ma il successivo timeshake SSL è scaduto. Di conseguenza, il bilanciatore del carico non può inoltrare la richiesta alla destinazione.

Verifica se il gruppo di destinazione sta usando il protocollo HTTPS. In caso contrario, il timeout dell'handshake SSL non è la causa dell'errore. Se il gruppo di destinazione sta utilizzando il protocollo HTTPS, prova in questo modo:

  • Verifica se i campi request_processing_time, target_processing_time e response_processing_time nei registri di accesso sono tutti impostati sul valore -1.
  • Verifica se sono presenti punti dati per il parametro TargetTLSNegotiationErrorCount.
  • Esegui un'acquisizione di pacchetti sulla destinazione per l'intervallo di tempo in cui si è verificato il problema, così da verificare che sia correlato a un handshake SSL. In caso affermativo, completa i passaggi indicati nella sezione Eseguire una acquisizione di pacchetti.
  • Verifica se le cifre o i protocolli non corrispondono.

Il periodo di ritardo per l'annullamento della registrazione è scaduto per una richiesta gestita da una destinazione per cui è stata annullata la registrazione

Negli eventi CloudTrail, verifica la presenza di una chiamata API con l'operazione DeregisterTargets nel corso l'intervallo di tempo in cui si è verificato il problema. Se una chiamata API con DeregisterTargets si è verificata nel corso dell'intervallo di tempo in cui si è verificato il problema, l'errore è causato da una destinazione annullata con troppo anticipo. Per risolvere questo problema, aumenta il periodo di ritardo di annullamento della registrazione in modo che le operazioni lunghe possano essere completate senza errori.

Risoluzione degli errori HTTP 502 quando la destinazione è una funzione Lambda

Nota: per le richieste a una funzione Lambda che hanno esito negativo, il bilanciatore del carico archivia i codici di motivo dell'errore specifici di Lambda nel campo error_reason dei registri di accesso.

La destinazione è una funzione Lambda e la dimensione del corpo della risposta supera 1 MB

  • Verifica se è presente un punto dati per il parametro LambdaUserError.
  • Verifica che il campo error_reason nel registro di accesso del bilanciatore del carico sia impostato su LambdaResponseTooLarge.

La destinazione è una funzione Lambda che non ha risposto entro il raggiungimento del timeout configurato

  • Verifica la configurazione del timeout della funzione Lambda.
  • Verifica se è presente un punto dati per il parametro LambdaUserError.
  • Verifica che il campo error_reason nel registro di accesso del bilanciatore del carico sia impostato su LambdaUnhandled.

La destinazione è una funzione Lambda che ha restituito un errore o la funzione è stata limitata dal servizio Lambda

Contatta AWS Support per una guida sulla limitazione del servizio.

Esegui una acquisizione dei pacchetti

Per Linux, utilizza il seguente comando:

sudo tcpdump -i any -w filename.pcap

Per Microsoft Windows, esegui il download e utilizza l'applicazione Wireshark (dal sito Web Wireshark).


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?