Introduzione

Se il vostro intento è ottimizzare la configurazione di Nginx su di un server Debian 10 in remoto continuate a leggere, altrimenti se volete ottimizzare la configurazione di Nginx sul vostro computer locale saltate il primo paragrafo "Connessione al Server" e leggere il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Siete ora connessi al vostro server, siete pronti per iniziare la configurazione di Nginx.

Prerequisiti

Segui questa guida per installare Nginx - MySQL - PHP: Come installare LEMP Nginx MySQL PHP su Debian 10.

Worker Processes e Worker Connections

Le prime due variabili da ottimizzare sono i processi di lavoro e le connessioni di lavoro.
La prima cosa da fare è capire quale è il numero di core che hai a disposizione sul tuo server. Di default worker_processes è impostato su auto.

Da terminale dare questo comando:

grep processor /proc/cpuinfo | wc -l

Se il risultato è per esempio "1", questo è il numero di core che hai a disposizione sul tuo server.

Il comando worker_connections ci dice quante persone possono essere contemporaneamente servite da Nginx. Il valore predefinito è 768.
Possiamo controllare i limiti del nostro core con questo comando:

ulimit -n

Un esempio di risultato potrebbe essere "1024".

Apriamo il file di configurazione di Nginx.
Da console:

sudo nano /etc/nginx/nginx.conf

Cerchiamo le seguenti righe e aggiorniamole con i valori ottenuti dai comandi precedenti:

worker_processes 1;
worker_connections 1024;

Buffer

Un'altra configurazione importante che possiamo fare riguarda la dimensione del buffer. Se le dimensioni del buffer sono troppo basse, Nginx dovrà scrivere su un file temporaneo, causando una continua lettura e scrittura su disco. Queste sono le variabili che modificheremo:

client_body_buffer_size: gestisce la dimensione del buffer del client, ovvero tutte le azioni POST inviate a Nginx.

client_header_buffer_size: Gestisce la dimensione dell'intestazione del client.

client_max_body_size: La dimensione massima consentita per una richiesta client. Se la dimensione massima viene superata, Nginx restituirà un errore "413" oppure "Request Entity Too Large".

large_client_header_buffers: Il numero massimo e la dimensione dei buffer per le intestazioni dei client di grandi dimensioni.

Quindi, sempre nello stesso file precedente nginx.conf

Aggiungere o modificare i seguenti parametri:

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;

Timeouts

I timeout possono anche migliorare drasticamente le prestazioni.

client_body_timeout e client_header_timeout sono responsabili del tempo in cui un server aspetterà che un client body o client header vengano inviati dopo la richiesta. Se non viene inviato né un body né un header, il server emetterà un errore "408" o "Request time out".

Keepalive_timeout Nginx chiuderà le connessioni con il cliente dopo questo periodo di tempo.

send_timeout riguarda il tempo risposta tra due operazioni di lettura; se dopo questo tempo il client non accetta nulla, Nginx chiuderà connessione.

Quindi, nello stesso file precedente nginx.conf

Aggiungere o modificare i seguenti parametri:

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

Compressione con Gzip

Gzip aiuta a ridurre il traffico di rete di Nginx.

Sempre nello stesso file nginx.conf

Aggiungere o modificare i seguenti parametri:

gzip             on;
gzip_comp_level  2;
gzip_min_length  1000;
gzip_proxied     expired no-cache no-store private auth;
gzip_types       text/plain application/x-javascript text/xml text/css application/xml;

Logging

Nginx registra ogni tipo di richiesta verso il server in un file di registro, è possibile disattivarlo.

Nello stesso file nginx.conf

Aggiungere o modificare i seguenti parametri:

access_log off;

Salvare e chiudere il file.

Per verificare se le configurazioni sono state effettuate correttamente, da console:

sudo nginx -t

Static File Caching

È possibile impostare la scadenza della cache per determinati tipi di file.

Aprire e modificare il seguente file:

sudo nano /etc/nginx/sites-available/default

Aggiungere le seguenti righe di codice all'interno del server{...} block:

server{
    ...
    location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d;
    }
    ...
}

Salvare e chiudere il file.

Per verificare se le configurazioni sono state effettuate correttamente, da console:

sudo nginx -t

Se non ci sono errori riavviare nginx:

sudo service nginx restart

L'ottimizzazione di Nginx su Debian 10 è terminata.