Come posso risolvere gli errori HTTP 502 quando effettuo richieste attraverso Classic Load Balancer?

Ultimo aggiornamento: 29/08/2022

Ricevo errori HTTP 502 quando il mio client effettua richieste a un sito Web attraverso un Classic Load Balancer (CLB). In che modo posso risolvere il problema?

Breve descrizione

Gli errori HTTP 502 (bad gateway) possono verificarsi per una delle seguenti ragioni:

  • Il server Web o i server dell'applicazione back-end associata attivi sulle istanze EC2 restituiscono un messaggio che non può essere analizzato dal tuo Classic Load Balancer.
  • Il server Web o i server dell'applicazione back-end associata restituiscono un messaggio di errore 502.

Per trovare la fonte di questi errori 502:

Se la risposta di back-end è la fonte dell'errore 502 di ELB, il problema potrebbe essere causato da:

  • Una risposta che contiene più di un CRLF tra ogni intestazione.
  • Una risposta che contiene un'intestazione Content-Lenght con al suo interno un numero non intero.
  • Una risposta che ha un numero di byte nel corpo superiore al valore dell'intestazione Content-Lenght.

Se l'errore 502 è generato dai tuoi server di back-end, contatta il proprietario dell'applicazione. Se l'errore 502 è generato dal Classic Load Balancer, la risposta HTTP da parte del back-end è malformata. Segui questi passaggi per risolvere gli errori 502 generati da ELB:

Risoluzione

1.    Controlla se il corpo della risposta ricevuta dall'applicazione back-end rispetta le specifiche HTTP. Fai riferimento alla seguente documentazione di RFC Editor:
RFC 7230 - HTTP/1.1: sintassi del messaggio e routing
RFC 7231 - HTTP/1.1: semantica e contenuto
RFC 7232 - HTTP/1.1: Richieste condizionali
RFC 7233 - HTTP/1.1: richieste di range
RFC 7234 - HTTP/1.1: Caching
RFC 7235 - HTTP/1.1: Autenticazione

2.    Assicurati che l'intestazione della risposta abbia la sintassi corretta: una chiave e il valore, come Content-Type:text. Assicurati che Content-Length o la codifica del trasferimento non vengano dimenticati nell'intestazione della risposta HTTP. Per ulteriori informazioni sui campi di intestazione HTTP del server Web, consulta la documentazione Internet Assigned Numbers Authority in Elenco dei campi di intestazione HTTP. Esamina le risposte HTTP ricevute eseguendo un comando simile a quello che segue:

curl -vko /dev/null server_instance_IP

3.    Controlla il registro di accesso ELB per trovare errori HTTP 502 duplicati. Gli errori 502 sia per elb_status_code sia per backend_status_code indicano che c'è un problema con una o più delle istanze del server Web. Identifica quali istanze del server Web stanno mostrando il problema, quindi controlla i registri dei server Web delle istanze dei server Web di back-end. Consulta le seguenti posizioni del registro per alcuni server Web e sistemi operativi comuni:

Registri Apache

  • I registri dei server Web per CentOS, RHEL, Fedora e Amazon Linux si trovano nella directory /var/log/httpd/.
  • I registri dei server Web per Debian e Ubuntu Linux si trovano nelle directory /var/log/apache2 e /var/log/lighthttpd/.

Registri NGINX

  • La posizione del registro di accesso di NGINX è definita all'interno del file nginx.conf: access_log /path/to/access.log
  • La posizione di default è /var/log/nginx/access.log

Registri IIS

I registri dei server Web per Windows IIS 7, IIS 7.5 e IIS 8.0 sono archiviati nella directory inetpub/logs/Logfiles. Per ulteriori informazioni sui registri di Internet Information Services (IIS), consulta la documentazione di Microsoft in Codice di stato HTTP su IIS 7.0 e versioni successive. Se hai confermato che gli errori 502 sono generati da ELB e che la risposta del back-end corrisponde alle convenzioni RFC, contatta il Supporto AWS.