Tutorial > Filtrare e ottimizzare le richieste di file statici con NGINX su Ubuntu 18.04

Filtrare e ottimizzare le richieste di file statici con NGINX su Ubuntu 18.04

Pubblicato il: 18 ottobre 2019

NGINX Optimization Ubuntu

NGINX è un server web dalle alte prestazioni utilizzato in particolar modo per gestire i file statici e come reverse proxy, ma grazie alla sua versatilità può essere sfruttato in qualsiasi tipo di situazione.

In questa guida imparerai a filtrare e ottimizzare le richieste di file statici con NGINX per aumentare le prestazioni del tuo sito e ridurre il carico del server attraverso una serie di accorgimenti, come l'abilitazione della compressione Gzip, la modifica del numero di processi/connessioni o della dimensione dei buffers.

Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Modifica dei Parametri di Configurazione

Apri il file di configurazione di NGINX utilizzando un editor come nano o vi. In questo esempio utilizziamo nano.

$ sudo nano /etc/nginx/nginx.conf

Abilita la compressione Gzip

Abilitando la compressione Gzip possiamo ridurre la quantità di dati da trasmettere. Fai attenzione a non incrementare troppo il livello di compressione di Gzip perchè potrebbe influire sulle prestazioni della CPU.

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;

Imposta il numero di processi e di connessioni

Il parametro worker_processes indica il numero di processi istanziati da NGINX dopo il suo avvio. Il numero di processi di norma dovrebbe essere uguali al numero di core del nostro server. Ad esempio se il nostro server ha un processore con 4 core dovremo impostare il parametro con il valore 4 in questo modo:

worker_processes 4;

Il parametro worker_connections indica il numero di clients che saranno serviti da un singolo processo. Per impostare un valore ottimale per la nostra configurazione non dovrai fare altro che verificare i limiti dei tuoi core con il comando:

$ ulimit -n

Il risultato ottenuto sarà il numero massimo di connessioni per processo. Quindi procedi a impostarlo:

worker_processes 1024;

Modifica la dimensione dei Buffers

Se la dimensione dei buffers é troppo bassa, NGINX sarà costretto a creare file temporanei causando numerose operazioni sul disco. Per evitarlo dovrai impostare correttamente la dimensione dei buffers.

client_max_body_size: indica la dimensione massima della richiesta del client

client_body_buffer_size: indica la dimensione del buffer relativo alle richieste POST

client_header_buffer_size: indica la dimensione del buffer relativo all'intestazione della richiesta del client

Modificando questi parametri con i seguenti valori dovresti ottenere un buon risultato:

client_max_body_size 8m;

client_body_buffer_size 10K;

client_header_buffer_size 1k;

Modifica la durata della Cache

Per gestire la durata della cache dei file statici non dovrai fare altro che specificare le estensioni dei file e la loro durata in questo modo:

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {

expires 365d;

}

dove con 365d si specifica che la cache per le relative estensioni durerà 365 giorni.

Riduci i Timeouts

I parametri client_body_timeout e client_header_timeout indicano rispettivamente il tempo di attesa per il corpo o l'intestazione della richiesta: se il server non riceve il corpo o l'intestazione entro questo tempo la connessione viene terminata con un errore di timeout.

Il parametro send_timeout indica il tempo massimo tra due operazioni di lettura: se questo tempo viene superato NGINX terminerà la connessione con il client.

Il parametro keepalive_timeout indica invece la durata massima di una connessione Keep-Alive prima di terminarla.

Impostando questi valori nel seguente modo dovresti ottenere un buon risultato:

client_body_timeout 12;

client_header_timeout 12;

send_timeout 10;

keepalive_timeout 15;

Disabilita i Logs

NGINX monitora ogni richiesta effettuata in un file di log. Per disabilitare questa funzionalità non dovrai fare altro che modificare il parametro access_log in questo modo:

access_log off;

Applica le modifiche

Riavvia il servizio NGINX per rendere effettive le modifiche:

$ sudo service nginx restart