Nginx: configurare la cache Fastcgi con WordPress

In questo tutorial spiegherò come configurare la memorizzazione nella cache FastCGI con WordPress per memorizzare nella cache le pagine generate con PHP, in modo da aumentare la velocità di un sito WordPress e ridurre il carico del server.

Con l’attivazione della cache fastcgi, le pagine generate in PHP verranno memorizzate nella cache a livello Nginx, con questa memorizzazione nella cache, quando la pagina viene chiamata e si trova nella cache, verrà servita direttamente senza generare codice PHP e quindi query SQL.

Per sfruttare appieno questa soluzione, il sito deve essere accessibile principalmente in modalità “ospite” senza autenticazione.

Ecco qui le righe di configurazione da aggiungere:

Nella parte http{ … } del file nginx.conf o nel file host virtuale del sito con il blocco server { … }, aggiungi le seguenti righe che ti consentiranno di dichiarare la cache a livello Nginx.

# fastcgi cache
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wpcache:200m max_size=10g inactive=2h use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  • fastcgi_cache_path : specifica la posizione della cache e i parametri della cache
  • keys_zone : L’attributo definisce il nome della cache e la dimensione dell’area di memoria condivisa. 200 m sono sufficienti per contenere più di un milione di chiavi.
  • max_size : dimensione massima della cache su disco
  • inactive : durata della cache quando non in uso, qui 2 ore
  • fastcgi_cache_key : consente di generare l’identificatore della cache (chiave)
  • fastcgi_ignore_header : consente di disabilitare la cache in base a determinate intestazioni HTTP.

Quanto segue dovrebbe essere aggiunto nella parte server { … } del virtualhost.

È possibile specificare delle eccezioni quando la cache non deve essere utilizzata:

set $skip_cache 0;

if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
set $skip_cache 1;
}

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}

Nella sezione che riguarda l’esecuzione del codice PHP aggiungere le seguenti righe:

location ~ \.php$ {
...
fastcgi_cache wpcache;
fastcgi_cache_valid 200 301 302 2h;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
}
  • fastcgi_cache : abilitare la cache e specificare il nome della cache da utilizzare
  • fastcgi_cache_valid : determina la durata della cache in base al codice HTTP
  • fastcgi_cache_use_stale error : determina le condizioni in cui Nginx dovrebbe fornire contenuti obsoleti.
  • fastcgi_cache_min_uses : determina quando la cache deve essere utilizzata in base al numero di richieste.
  • fastcgi_cache_lock : comportamento per richieste simultanee.
  • fastcgi_cache_bypass : Bypass della cache utilizzando la variabile $skip_cache
  • fastcgi_no_cache : Bypass della cache utilizzando la variabile $skip_cache

Testare la configurazione Nginx:

sudo nginx -t

Se non ci sono errori, ricaricare la configurazione:

sudo systemctl reload nginx

Per testare la funzione cache, accedi al sito WordPress come visitatore non registrato e apri gli strumenti per sviluppatori del browser (F12).

Vai a una pagina del sito e guarda le intestazioni delle risposte.

Poiché si tratta del primo caricamento della pagina, la cache non è disponibile (MISS) esaminando l’intestazione X-Fastcgi-Cache.

Ricarica la pagina:

Questa volta è stata utilizzata la cache e possiamo vederlo con l’intestazione X-Fastcgi-Cache che è impostata su HIT.

Per concludere questo tutorial, spiegherò come svuotare la cache. Per WordPress esiste un plugin che permette di gestire la cache Fastcgi di Nginx, chiamato Nginx Helper. Per funzionare è necessario avere il modulo libnginx-mod-http-cache-purge. Questa soluzione funziona su un’installazione standard.

Che ci si trovi in un contenitore o meno, il modo più semplice per svuotare la cache è svuotare la cartella della cache e ricaricare la configurazione Nginx:

rm -rf /etc/nginx/cache/
/etc/init.d/nginx reload

Ora sai come impostare la cache Fastcgi su Nginx per WordPress.

Romain Drouche
Architetto di sistema | MCSE: Infrastruttura di base
Esperto di infrastrutture IT con oltre 15 anni di esperienza sul campo. Attualmente Project Manager Sistemi e Reti ed esperto di Sicurezza dei Sistemi Informativi, utilizzo la mia competenza per garantire l'affidabilità e la sicurezza degli ambienti tecnologici.

Lascia un commento