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

3 minuti di lettura
0

Desidero utilizzare un'istanza Amazon Elastic Compute Cloud (Amazon EC2) che esegue Apache o NGINX come server di backend per Elastic Load Balancing (ELB). Ma non so quali impostazioni utilizzare per ottenere le migliori prestazioni.

Risoluzione

Le impostazioni migliori per un sistema di bilanciamento del carico dipendono dal caso d'uso specifico. Per ottenere le migliori prestazioni, analizza i tempi di risposta dell’applicazione di backend e i requisiti dei client.

Se l'applicazione di backend esegue Apache o NGINX, controlla i seguenti parametri:

Timeout dell'intestazione del client (Timeout in Apache; client\ _header\ _timeout in NGINX):
Imposta il timeout dell'applicazione su un valore superiore al valore di timeout di inattività del sistema di bilanciamento del carico. Nell’eseguire questa operazione, assicurati che il sistema di bilanciamento del carico chiuda correttamente le connessioni inattive. Se il server di backend interrompe una connessione senza un'adeguata notifica al sistema di bilanciamento del carico, è possibile che venga visualizzato un errore 504.

Keep-alive (KeepAlive in Apache; keepalive\ _disable in NGINX):
Attiva keep-alive per ridurre l'utilizzo della CPU e migliorare i tempi di risposta. Con keep-alive attivo, al sistema di bilanciamento del carico non occorre stabilire una nuova connessione TCP per ogni richiesta HTTP.

Timeout Keep-alive (KeepAliveTimeout in Apache; keepalive\ _timeout in NGINX):

Quando l'opzione keep-alive è attivata, scegli un timeout keep-alive più lungo rispetto al timeout di inattività del sistema di bilanciamento del carico.

Timeout di lettura (RequestReadTimeout in Apache; client\ _header\ _timeout e client\ _body\ _timeout in NGINX):
Imposta i timeout di lettura adatti ai tempi di risposta dell'applicazione. In questo modo, assicuri che il sistema di bilanciamento del carico mantenga la connessione aperta abbastanza a lungo per ricevere sia l'intestazione che il corpo della richiesta.

Avvertenza: controlla che il valore del timeout di inattività del sistema di bilanciamento del carico sia inferiore al timeout del backend.

Numero massimo di richieste keep-alive (MaxKeepAliveRequests in Apache; keepalive\ _requests in NGINX):
Questa opzione determina quante richieste serve una singola connessione TCP quando keep-alive è attivo. Per un migliore utilizzo delle risorse, imposta il numero massimo di richieste keep-alive su 100 o più.

AcceptFilter (AcceptFilter in Apache; accept\ _filter in NGINX):
AcceptFilter è attivato per impostazione predefinita e indica ad Apache di utilizzare l'opzione TCP\ _DEFER\ _ACCEPT per le connessioni. Con questa impostazione, è possibile che il socket TCP si trovi in uno stato “semiaperto”. In questo caso, il sistema di bilanciamento del carico presume che la connessione sia stabilita, ma senza che sia stata stabilita alcuna connessione con l'istanza di backend. Le connessioni semiaperte sono più comuni nei sistemi di bilanciamento del carico a basso volume, dove le connessioni hanno tempo per invecchiare prima di essere utilizzate.

Registrazione: attiva l'opzione % {X-Forwarded-For}i in modo che Apache visualizzi l'intestazione ELB x-forwarded-for nei log di ciascuna richiesta. Questa intestazione contiene l'indirizzo IP del client originale. L'opzione %D aggiunge ai log di accesso il tempo necessario per completare ogni richiesta:

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

Apache: il modulo eventi Apache MPM può chiudere prematuramente le connessioni dai sistemi di bilanciamento del carico. La chiusura prematura delle connessioni genera errori HTTP 502 per Application Load Balancer ed errori HTTP 504 per Classic Load Balancer. Per attenuare questo comportamento, è consigliabile utilizzare invece il modulo di lavoro MPM.

Nota: dopo avere aggiornato la configurazione, riavvia Apache o NGINX.


Informazioni correlate

Istanze registrate per Classic Load Balancer

Configura Classic Load Balancer

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa