Come posso risolvere i problemi relativi agli errori HTTP 502 di Application Load Balancer?

7 minuti di lettura
0

Riscontro errori HTTP 502 con il mio Application Load Balancer.

Descrizione breve

Le possibili cause di HTTP 502 sono diverse: errori di gateway non valido, e l'origine può provenire dalla destinazione o dall'Application Load Balancer. Per identificare l'origine dell'errore, utilizza le metriche e i log di accesso di Amazon CloudWatch.

Prima di risolvere i problemi relativi all'errore dall'Application Load Balancer, assicurati di abilitare la registrazione degli accessi. Per capire cosa significa ogni campo nel log di accesso, vedi le 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.

Soluzione

Trova l'origine degli errori HTTP 502

Utilizzo delle metriche CloudWatch

Se i punti dati vengono visualizzati nella metrica HTTPCode_ELB_502_Count, il sistema di bilanciamento del carico è l'origine degli errori HTTP 502. Se compaiono nella metrica HTTPCode_Target_5XX_Count, la destinazione è l'origine.

Utilizzo dei log di accesso

Se elb_status_code è "502" e target_status_code è "-", il sistema di bilanciamento del carico è l'origine degli errori HTTP 502. Se elb_status_code è "502" e target_status_code è "502", la destinazione è l'origine degli errori.

Risoluzione dei problemi relativi agli errori HTTP 502

Nota: Filtra i log di accesso per elb_status_code = "502" e target_status_code per aiutarti a determinare la causa. Quindi, completa i passaggi specifici per il tuo caso d'uso.

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

Se ricevi un RST TCP dal target quando stabilisci una connessione, il sistema di bilanciamento del carico non può stabilire un handshake TCP a 3 vie con la destinazione. Di conseguenza, il sistema di bilanciamento del carico non può inoltrare la richiesta dell'utente alla destinazione.

  • Verifica se sono presenti punti dati per la metrica TargetConnectionErrorCount. Questa metrica rappresenta il numero di connessioni che non vengono stabilite correttamente tra il sistema di bilanciamento del carico e la destinazione.
  • Controlla se i campi request_processing_time, target_processing_time e response_processing_time nei log di accesso sono impostati ciascuno sul valore -1. Questo valore indica che il sistema di bilanciamento del carico non può inviare la richiesta alla destinazione perché necessita di una connessione riuscita correttamente.

Di seguito è riportato un esempio di voce del log 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: In questa voce del log di accesso, request_processing_time, target_processing_time e response_processing_time sono impostati ciascuno su -1.

Il sistema di bilanciamento del carico ha ricevuto una risposta imprevista dalla destinazione, ad esempio "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 log di accesso sono tutti impostati sul valore -1.
  • Verifica se il traffico è consentito dalle sottoreti del sistema di bilanciamento del carico alle destinazioni sulla porta di destinazione.

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

Il sistema di bilanciamento del carico riceve una richiesta e la inoltra alla destinazione. La destinazione riceve la richiesta e inizia a elaborarla, ma chiude la connessione al sistema di bilanciamento del carico troppo presto. Ciò si verifica in genere quando la durata del timeout keep-alive per la destinazione è inferiore al valore del timeout di inattività del sistema di bilanciamento 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.

Vedi il seguente esempio di voce del log 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: In questa voce del log di accesso, request_processing_time è 0.001, target_processing_time è 4.205 e response_processing_time è -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 per comprendere la risposta della destinazione.

Il sistema di bilanciamento del carico ha rilevato un errore dell'handshake SSL o un timeout dell'handshake SSL (10 secondi) durante la connessione a una destinazione

La connessione TCP dal sistema di bilanciamento del carico all'ascoltatore HTTPS del target è stata eseguita con successo, ma il successivo handshake SSL è scaduto. Di conseguenza, il sistema di bilanciamento del carico non può inoltrare la richiesta alla destinazione.

Verifica se il gruppo di destinazione utilizza il protocollo HTTPS. In caso contrario, il timeout dell'handshake SSL non è la causa del problema. Se il gruppo di destinazione utilizza il protocollo HTTPS, controlla i seguenti punti:

  • Verifica se i campi request_processing_time, target_processing_time e response_processing_time nei log di accesso sono tutti impostati sul valore -1.
  • Verifica se sono presenti punti dati per la metrica TargetTLSNegotiationErrorCount.
  • Esegui un'acquisizione di pacchetti sulla destinazione per il periodo di tempo in cui si è verificato il problema per controllare che sia correlato a un handshake SSL. In tal caso, completa i passaggi 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

Nei tuoi eventi CloudTrail, verifica la presenza di una chiamata API con l'azione DeregisterTargets durante l'intervallo di tempo in cui si è verificato il problema. Se si è verificata una chiamata API con DeregisterTargets durante il periodo 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 sistema di bilanciamento del carico archivia i codici di motivo dell'errore specifici di Lambda nel campo error_reason dei log di accesso.

La destinazione è una funzione Lambda e il corpo della risposta supera 1 MB

  • Verifica se è presente un punto dati per la metrica LambdaUserError.
  • Verifica se il campo error_reason nel log di accesso del sistema di bilanciamento del carico è 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 la metrica LambdaUserError.
  • Verifica se il campo error_reason nel log di accesso del sistema di bilanciamento del carico è impostato su LambdaUnhandled.

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

Contatta Supporto AWS per ricevere indicazioni sulla limitazione del servizio.

Esegui un’acquisizione di pacchetti

Per Linux, usa il seguente comando:

sudo tcpdump -i any -w filename.pcap

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

Per maggiori dettagli, consulta Come posso risolvere i problemi relativi alle prestazioni di rete tra le istanze EC2 Linux o Windows in un VPC e un host on-premise tramite il gateway Internet? Consulta le sezioni Testa i campioni di acquisizione di pacchetti con tcpdump e Esegui una acquisizione dei pacchetti.

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa