Come posso risolvere gli errori 504 restituiti durante l'utilizzo di un Classic Load Balancer?

4 minuti di lettura
0

Vedo errori HTTP 504 nei log di accesso di Classic Load Balancer, nelle metriche di Amazon CloudWatch o quando mi connetto al mio servizio tramite un Classic Load Balancer.

Risoluzione

Un errore HTTP 504 è un codice di stato HTTP che indica un gateway o un proxy scaduto. Durante la risoluzione dei problemi, verifica quanto segue:

Controlla il timeout di inattività del sistema di bilanciamento del carico e modificalo se necessario

Il motivo più comune di un errore HTTP 504 è che un'istanza corrispondente non ha risposto alla richiesta entro il timeout di inattività configurato. Per impostazione predefinita, il timeout di inattività per Classic Load Balancer è di 60 secondi.

Se le metriche di CloudWatch sono attivate, controlla le metriche di CloudWatch per il tuo sistema di bilanciamento del carico. Quando i punti dati di latenza sono uguali al valore di timeout del sistema di bilanciamento del carico configurato e HTTPCode_ELB_5XX contiene punti dati, significa che almeno una richiesta è scaduta.

Per risolvere il problema, puoi svolgere una delle due operazioni descritte:

  • Modifica il timeout di inattività per il tuo sistema di bilanciamento del carico in modo che la richiesta HTTP venga completata entro il periodo di timeout di inattività.
  • Ottimizza la tua applicazione per rispondere più rapidamente.

Assicurati che le istanze di backend mantengano aperte le connessioni

Quando l'istanza di backend chiude una connessione TCP al sistema di bilanciamento del carico prima che raggiunga il valore di timeout di inattività, potrebbe essere visualizzato un errore HTTP 504.

Per risolvere questo problema, attiva le impostazioni keep-alive sulle tue istanze di backend, quindi imposta il timeout keep-alive su un valore maggiore del timeout di inattività del sistema di bilanciamento del carico.

(Solo Apache) Disattivazione di TCP\ _DEFER\ _ACCEPT

Quando TCP\ _DEFER\ _ACCEPT è attivato per le istanze di backend Apache, il sistema di bilanciamento del carico avvia una connessione inviando un SYN all'istanza di backend. L'istanza di backend risponde quindi con un SYN-ACK e il sistema di bilanciamento del carico invia un ACK vuoto all'istanza di backend.

Poiché l'ultimo ACK è vuoto, il backend non accetta l'ACK e invia nuovamente un SYN-ACK al sistema di bilanciamento del carico. Ciò può comportare un successivo timeout dei tentativi SYN. Quando FIN o RST non vengono inviati prima che l'istanza di backend chiuda la connessione, il sistema di bilanciamento del carico considera la connessione stabilita; tuttavia non lo è ancora. Quindi, quando il sistema di bilanciamento del carico invia richieste tramite questa connessione TCP, il backend risponde con un RST generando un errore 504.

Per risolvere questo problema, imposta sia AcceptFilter http che AcceptFilter https su none.

(Solo Apache) Disattivazione dell'MPM event e configurazione ottimale degli MPM prefork e worker

È consigliabile disattivare l'MPM event sulle istanze di backend registrate su un sistema di bilanciamento del carico. Poiché il backend di Apache chiude dinamicamente le connessioni, le connessioni chiuse potrebbero causare errori HTTP 504.

Per avere prestazioni ottimali quando si utilizzano gli MPM prefork e worker, e si presume che il sistema di bilanciamento del carico sia configurato con un timeout di inattività di 60 secondi, utilizza i seguenti valori:

mod_prefork MPMmod_worker MPM
Timeout6565
KeepAliveTimeout6565
KeepAliveOnOn
MaxKeepAliveRequests100000
AcceptFilter httpnonenone
AcceptFilter httpsnonenone

Informazioni correlate

Monitoraggio del Classic Load Balancer

Risoluzione dei problemi di un Classic Load Balancer: errori HTTP

Quali sono le impostazioni ottimali per utilizzare Apache o NGINX come server di backend per ELB?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa