Come posso risolvere gli errori HTTP 502 di Application Load Balancer?
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 log 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 capire il significato di ciascun campo nel log 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 nella metrica HTTPCode_ELB_502_Count, l'origine degli errori HTTP 502 è da attribuire al load balancer. Se vengono invece visualizzati nella metrica HTTPCode_Target_5XX_Count, l'origine risiede 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 load balancer non è in grado di inoltrare la richiesta dell'utente alla destinazione.
- Verifica se sono presenti punti dati per il parametro TargetConnectionErrorCount. Questo parametro indica il numero di connessioni non stabilite correttamente tra il load balancer 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).

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- Come posso risolvere gli errori HTTP 502 quando effettuo richieste attraverso Classic Load Balancer?AWS UFFICIALEAggiornata 7 mesi fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 8 mesi fa