Prerequisiti
Segui questa guida per installare Nginx - MySQL - PHP: Come installare LEMP Nginx MySQL PHP su Ubuntu 16.04-17.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 è terminata.