Configura Nginx FastCGI Cache su Ubuntu 20.04

Nginx è un potente server di applicazioni web. Tuttavia, in combinazione con le situazioni LEMP, PHP è noto per essere lento con le richieste che devono andare a PHP-FPM, che quindi interroga il database MySQL/MariaDB, quindi Nginx genererà una pagina HTML statica che viene quindi restituita a Nginx.

Quindi, se un server di un sito Web è sottoposto a un carico pesante, le spese generali aumentano notevolmente. Tuttavia, Nginx supporta una soluzione cache con FastCGI per ridurre il sovraccarico e consentire a un server di gestire più richieste di pagine con file richiesti serviti da una cache invece di dover eseguire l'intero percorso per andare al database e viceversa.

Ti verrà mostrato come configurarlo su un server Nginx su Ubuntu 20.04 LTS Focal nella seguente guida.

Prerequisiti

  • Ubuntu Server 20.04 o in avanti.
  • Pila LEMP (Nginx, PHP, MariaDB)
  • Accesso root o account con privilegi sudo.
  • Il ricciolo è installato
  • Pacchetti di sistema aggiornati.
sudo apt update && sudo apt upgrade -y \
 sudo apt install curl

pubblicità


Come configurare la cache Nginx FastCGI

Modifica file di configurazione Nginx

Dovrai aprire il tuo file nginx.conf con un editor di testo nella prima parte. La guida utilizzerà l'editor di testo nano.

sudo nano /etc/nginx/nginx.conf

Ora, nella parte HTTP, avrai bisogno delle seguenti righe.

fastcgi_cache_path /var/nginx/fastcgi_cache levels=1:2 keys_zone=fcgicache:150m max_size=20g inactive=60m use_temp_path=off;
 fastcgi_cache_key "$scheme$request_method$host$request_uri";

Una volta inserito, CTRL+O quindi digitare "Y", quindi CTRL+X per uscire.

Spiegazione delle impostazioni che hai inserito nel tuo file nginx.conf.

  • fastcgi_cache_path – specifica la posizione della cache FastCGI (/var/nginx/fastcgi_cache/).
  • livelli=1:2 – crea una gerarchia di directory a due livelli nella posizione della cache. Lo scopo di ciò è distribuire i file in due directory invece di richiedere tutti i file dalla stessa fonte, il che può causare rallentamenti.
  • keys_zone – specifica il nome della zona di memoria condivisa (fastcgi_cache) e la sua dimensione (120M). Questa è la zona di memoria per l'archiviazione delle chiavi della cache e dei metadati durante la richiesta.
  • dimensione_massima – imposta la dimensione massima della cache. L'esempio mostra 20 GB. Una volta riempito, rimuoverà i file più utilizzati. Se non si risolve questo problema, l'intero disco si riempirà.
  • inattivo – rimuovere i dati che sono stati inattivi per un periodo specificato. Nell'esempio, è impostato per 60 minuti. Nota, puoi impostarlo al livello che preferisci o al minimo.
  • use_temp_path – istruzioni Nginx per scrivere i file per la cache direttamente nella cartella specificata ed evita che Nginx copi prima i file in un'area di archiviazione temporanea che non è necessaria.
  • fast_cgi_cache_key – definisce la chiave per la ricerca nella cache. Nginx aggiunge una funzione hash MD5sum sulla chiave cache e utilizza il risultato hash come nome dei file cache.

Modifica blocco server Nginx

Ora devi configurare il tuo blocco server. Innanzitutto, apri il blocco della tua posizione come segue.

sudo nano /etc/nginx/sites-available/example.com.conf

Con LEMP già installato, avrai un blocco di posizione per (~/.php$) per aggiungere quanto segue.

fastcgi_cache fcgicache;
 fastcgi_cache_valid 200 60m;
 fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
 fastcgi_cache_min_uses 1;
 fastcgi_cache_lock on;
 add_header X-FastCGI-Cache $upstream_cache_status;

FastCGI Cache Purge

Ora, crea una direttiva Cache Purge se la cache deve essere eliminata manualmente.

Fastcgi-Purge Config
 location ~ /purge(/.*) {
 Uncomment the following two lines to allow purge only from the webserver
 allow 127.0.0.1;
 deny all;
 fastcgi_cache_purge fcgicache "$scheme$request_method$host$1";
 } 

Una volta inserito, CTRL+O quindi digitare "Y", quindi CTRL+X per uscire.

Ora prova la tua configurazione Nginx prima di riavviare.

sudo nginx -t

L'output dovrebbe essere se corretto:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful

Ora riavvia il tuo server Nginx per rendere effettive le modifiche.

sudo systemctl restart nginx

Spiegazione delle impostazioni immesse nel file di blocco del server (esempio.com.conf).

  • fastcgi_cache – questo indica a Nginx di abilitare la memorizzazione nella cache utilizzando la zona di memoria definita impostata in (fastcgi_cache_path) nella configurazione di Nginx.conf.
  • fastcgi_cache_valid – imposta i codici di stato HTTP del tempo di cache, questo può essere modificato in periodi più brevi o più lunghi, inoltre è possibile modificare i codici di stato. Non rimuovere il codice 200, che deve rimanere sempre.
  • fastcgi_cache_use_stale – imposta il numero di volte in cui la risorsa viene richiesta dai client prima che Nginx la memorizzi nella cache.
  • fastcgi_cache_lock – quando è impostato su on, le richieste iniziali vengono servite per prime, con altre in attesa che tali richieste vengano completate per prime. Se impostato su off, tutte le richieste vanno direttamente al server PHP-FPM.
  • add_header – aggiunge un'intestazione X-FastCGI-Cache nella risposta HTTP. Questo mostrerà se la cache FastCGI ha servito la richiesta o meno con un hit o miss.

Crea cartella per FastCGI Cache

Crea una cartella che abbiamo specificato nel nostro percorso affinché Nginx possa memorizzare nella cache anche i file.

sudo mkdir -p /var/nginx/fastcgi_cache

pubblicità


Prova Nginx FastCGI Cache

Ora, prova la tua cache con il comando curl di seguito. Tieni presente che potresti dover attivare il comando alcune volte prima che venga attivata una cache, a seconda delle impostazioni specificate.

curl -I http://www.your-domain.com

Cerca nel tuo output per (X-FastCGI-Cache: Hit).

~$ curl -I https://www.linuxcapable.com/
 HTTP/1.1 200 ok
 Date: Wed, 16 Jun 2021 06:22:42 GMT
 Connection: keep-alive
 Cache-Control: max-age=3600
 Expires: Wed, 16 Jun 2021 07:22:42 GMT
 Location: https://www.linuxcapable.com
 cf-request-id: 0ab51591810000df280931a000000001
 NEL: {"report_to":"cf-nel","max_age":604800}
 X-FastCGI-Cache: Hit
 X-Content-Type-Options: nosniff
 Server: cloudflare
 CF-RAY: 6601f1fc091cdf28-MEL

File FastCGI Cache da ignorare

Alcune funzionalità del sito Web non dovrebbero essere affatto memorizzate nella cache. Ad esempio, per WordPress siti, sezioni di commento nel feed di feedback/risposte del sito Web, mappe del sito, ad esempio, dovrebbero essere impostati per evitare. Puoi farlo inserendo il seguente codice per esentare questi elementi sopra la posizione (~\.php$) linea.

cache by default
 set $skip_cache 0;
 do not cache uri's containing the following, add more as required
 if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-..php|^/feed/|/tag/./feed/|index.php|/.sitemap..(xml|xsl)") {
     set $skip_cache 1;
 }
 do not use the cache for logged in users/comments
 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
     set $skip_cache 1;
 }
 requests with query string go straight to PHP not cache.
 if ($request_method = POST) {
     set $skip_cache 1;
 }
 if ($query_string != "") {
     set $skip_cache 1;
 }

Se desideri eseguire il debug, puoi aggiungere sotto ogni (imposta $skip_cache 1;) quanto segue per abilitare.

set $skip_reason "note of your choice";

pubblicità


Commenti e Conclusione

Con una configurazione Nginx e LEMP esistente, la guida ti ha mostrato come implementare una direttiva FastCGI Cache sul tuo server, che può migliorare le prestazioni riducendo il numero di richieste al tuo PHP-FPM durante le ore di punta. Questo andrà poi a ridurre il carico di sistema, che tutti i siti Web si sforzano di perfezionare.

FastCGI è vantaggioso per i siti Web CMS come WordPress che dispongono di plug-in che possono funzionare di pari passo con la tecnologia di memorizzazione nella cache e che possono essere trovati nelle sezioni dei plug-in di tali prodotti CMS.

Lascia un tuo commento