Che cos’è keepalive_timeout? Meglio aumentare o diminiure?

Turgut K.Linux1 mese fa48 Visite

Il parametro keepalive_timeout in Nginx è una direttiva importante per ottimizzare le prestazioni del server, soprattutto quando si gestiscono molte connessioni HTTP. Ecco una spiegazione dettagliata di cosa fa, a cosa serve e come aumentarlo. La decisione di aumentare o diminuire il valore di keepalive_timeout dipende dal contesto e dalle esigenze specifiche del tuo server e delle tue applicazioni.

Quando è meglio aumentare keepalive_timeout?

Aumentare il valore di keepalive_timeout è utile in questi scenari:

  1. Applicazioni con molte richieste in sequenza:
  • Se i client effettuano molte richieste in rapida successione (ad esempio, caricamento di pagine web con molte risorse come CSS, JavaScript, immagini), un valore più alto di keepalive_timeout permette di riutilizzare la stessa connessione TCP, riducendo la latenza e migliorando le prestazioni.
  1. Ridurre l’overhead delle connessioni:
  • Aumentare il timeout riduce il numero di volte in cui le connessioni TCP devono essere aperte e chiuse, il che è particolarmente utile se il server gestisce un alto volume di richieste.
  1. Client con alta latenza:
  • Se i client si connettono da reti con alta latenza (ad esempio, reti mobili), un keepalive_timeout più alto può migliorare l’esperienza utente.
  1. Ottimizzazione per HTTP/2:
  • Con HTTP/2, che utilizza una singola connessione per più richieste, un keepalive_timeout più alto può essere vantaggioso.

Quando è meglio diminuire keepalive_timeout?

Diminuire il valore di keepalive_timeout è consigliabile in questi casi:

  1. Server con molte connessioni simultanee:
  • Se il server gestisce un numero molto elevato di client contemporaneamente, un keepalive_timeout troppo alto può portare a un esaurimento dei file descriptor o delle risorse del server, poiché le connessioni rimangono aperte più a lungo del necessario.
  1. Richieste sporadiche:
  • Se i client effettuano richieste solo occasionalmente (ad esempio, una richiesta ogni pochi minuti), non ha senso mantenere le connessioni aperte a lungo. Un timeout più breve libera risorse più velocemente.
  1. Protezione da attacchi DDoS:
  • Un keepalive_timeout più breve può aiutare a mitigare alcuni tipi di attacchi DDoS, poiché le connessioni inattive vengono chiuse più rapidamente.
  1. Riduzione dell’uso della memoria:
  • Ogni connessione keepalive aperta utilizza memoria sul server. Se il server ha risorse limitate, un timeout più breve può aiutare a ridurre l’uso della memoria.

Valori consigliati

  • Valore predefinito: Di solito è impostato su 75 secondi.
  • Valore ottimale: Per la maggior parte dei casi d’uso, un valore compreso tra 60 e 120 secondi è un buon compromesso.
  • Valore ridotto: Se hai bisogno di chiudere le connessioni più rapidamente, puoi impostare un valore come 10-30 secondi.
  • Valore aumentato: Se vuoi mantenere le connessioni aperte più a lungo, puoi impostare un valore come 300 secondi (5 minuti) o più, ma solo se il server ha risorse sufficienti.

Come decidere?

Ecco alcuni fattori da considerare per prendere una decisione:

  1. Numero di client attivi:
  • Se il server gestisce molti client contemporaneamente, un timeout più breve può essere preferibile.
  • Se il server gestisce pochi client ma con molte richieste in sequenza, un timeout più lungo è meglio.
  1. Tipo di traffico:
  • Per traffico HTTP/2 o applicazioni web moderne, un timeout più lungo è generalmente migliore.
  • Per traffico sporadico o API, un timeout più breve può essere sufficiente.
  1. Risorse del server:
  • Se il server ha risorse limitate (memoria, file descriptor), un timeout più breve è consigliabile.
  • Se il server ha risorse abbondanti, puoi permetterti un timeout più lungo.
  1. Latenza della rete:
  • Se i client si connettono da reti con alta latenza, un timeout più lungo può migliorare le prestazioni.

Monitoraggio e ottimizzazione

Dopo aver modificato keepalive_timeout, monitora le prestazioni del server utilizzando strumenti come:

  • htop o top per verificare l’uso della CPU e della memoria.
  • netstat o ss per controllare il numero di connessioni attive.
  • Log di Nginx per identificare eventuali problemi.

Se noti un aumento eccessivo dell’uso delle risorse o problemi di prestazioni, regola il valore di keepalive_timeout di conseguenza.

In sintesi:

  • Aumenta keepalive_timeout se vuoi migliorare le prestazioni per client con molte richieste in sequenza o con alta latenza.
  • Diminuisci keepalive_timeout se il server gestisce molte connessioni simultanee o ha risorse limitate.

La scelta migliore dipende dal tuo caso d’uso specifico e dalle risorse disponibili.

Cosa fa keepalive_timeout

La direttiva keepalive_timeout definisce due cose:

  1. Il tempo massimo in cui una connessione keepalive rimane aperta dopo che una richiesta è stata completata.
  2. Il tempo massimo che il server aspetta per ricevere una nuova richiesta dal client prima di chiudere la connessione.

In altre parole, keepalive_timeout controlla per quanto tempo una connessione TCP rimane aperta dopo che una richiesta HTTP è stata completata, in attesa di eventuali richieste successive dallo stesso client.

A cosa serve keepalive_timeout?

  1. Riduzione dell’overhead: Le connessioni keepalive evitano di dover aprire e chiudere ripetutamente connessioni TCP per ogni richiesta, riducendo l’overhead e migliorando le prestazioni.
  2. Miglioramento della latenza: Le connessioni persistenti consentono ai client di inviare più richieste sulla stessa connessione, riducendo la latenza.
  3. Riduzione del carico sul server: Mantenere le connessioni aperte per un periodo ragionevole riduce il carico sul server, poiché non deve gestire continuamente nuove connessioni.

Come si aumenta keepalive_timeout?

Per aumentare il valore di keepalive_timeout, devi modificare il file di configurazione di Nginx (nginx.conf o un file di configurazione specifico per un sito).

Passaggi:

  1. Apri il file di configurazione di Nginx:
   sudo nano /etc/nginx/nginx.conf

Oppure, se stai configurando un sito specifico, apri il file di configurazione del sito (ad esempio, in /etc/nginx/sites-available/).

  1. Trova o aggiungi la direttiva keepalive_timeout:
    La direttiva keepalive_timeout può essere impostata nel blocco http, server o location. Di solito, si trova nel blocco http:
   http {
       keepalive_timeout 65;
       ...
   }

Il valore predefinito è spesso 75 secondi, ma può variare a seconda della configurazione.

  1. Modifica il valore di keepalive_timeout:
    Aumenta il valore in base alle tue esigenze. Ad esempio, per impostare un timeout di 120 secondi:
   http {
       keepalive_timeout 120;
       ...
   }
  1. Salva e chiudi il file:
    Se stai usando nano, premi CTRL + X, poi Y per confermare e Invio per salvare.
  2. Ricarica la configurazione di Nginx:
    Dopo aver modificato il file di configurazione, ricarica Nginx per applicare le modifiche:
   sudo systemctl reload nginx

Parametri aggiuntivi di keepalive_timeout

La direttiva keepalive_timeout può accettare due valori:

  1. Timeout principale: Il tempo in secondi per mantenere aperta una connessione keepalive.
  2. Timeout di intestazione (opzionale): Il tempo in secondi che il server aspetta per ricevere una nuova richiesta dal client.

Esempio:

keepalive_timeout 65 60;
  • 65: La connessione rimane aperta per 65 secondi dopo l’ultima richiesta.
  • 60: Il server aspetta 60 secondi per ricevere una nuova richiesta prima di chiudere la connessione.

Considerazioni sull’aumento di keepalive_timeout

  • Vantaggi:
  • Migliora le prestazioni per i client che effettuano più richieste in sequenza (ad esempio, caricamento di pagine web con molte risorse).
  • Riduce il carico sul server, poiché evita di aprire e chiudere connessioni TCP frequentemente.
  • Svantaggi:
  • Un valore troppo alto può portare a un uso eccessivo delle risorse del server, poiché le connessioni rimangono aperte più a lungo del necessario.
  • Se il server gestisce molti client, un keepalive_timeout elevato può esaurire i file descriptor disponibili.
  • Valori consigliati:
  • Per la maggior parte dei casi d’uso, un valore compreso tra 60 e 120 secondi è sufficiente.
  • Se hai un’applicazione con molte richieste in sequenza (ad esempio, un’app single-page), puoi aumentare ulteriormente il valore.

Esempio completo

Ecco un esempio di configurazione con keepalive_timeout aumentato:

http {
    keepalive_timeout 120;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

Seguendo questi passaggi, avrai configurato correttamente keepalive_timeout per ottimizzare le prestazioni del tuo server Nginx.

0 Votes: 0 Upvotes, 0 Downvotes (0 Points)

Lascia una risposta

Post precedente

Post successivo

Follow
Registrazione Barra laterale Ricerca Aggiungi link o post
Articoli popolari
Caricamento

Accesso in corso 3 secondi...