11 Maggio 2023

Come pulire correttamente la Cache Varnish in un blog WordPress.

Uno snippet di codice PHP da integrare nel vostro tema per pulire in modo veloce, versatile e selettivo la vostra Cache Varnish.

Varnish Cache è una tecnologia software estremamente potente e flessibile, ampiamente utilizzata come acceleratore HTTP. Questo strumento agisce come un intermediario tra il server e il client, immagazzinando dati (o “caching”) per ridurre il carico sul server e fornire risposte più veloci ai client.

Varnish Cache Reverse Proxy Mechanism

I vantaggi di Varnish Cache.

I vantaggi di Varnish Cache sono molteplici. Prima di tutto, aumenta notevolmente le prestazioni del sito web riducendo il tempo di caricamento delle pagine e risparmiando risorse server. In secondo luogo, migliora la scalabilità dei siti web permettendo di gestire un numero maggiore di richieste contemporaneamente. Infine, offre una flessibilità senza pari grazie al suo linguaggio di configurazione VCL (Varnish Configuration Language), che consente di definire regole di caching specifiche per ogni caso.

Varnish ed il TTFB

Varnish Cache ha un impatto significativo sul Tempo di Primo Byte (TTFB), un indicatore chiave delle prestazioni del sito web. Il TTFB è il tempo che intercorre tra il momento in cui un client (come un browser web) invia una richiesta HTTP e il momento in cui riceve il primo byte di dati dal server. Varnish Cache riduce drasticamente il TTFB immagazzinando le risposte del server e fornendole rapidamente ai client, evitando la necessità di processare nuovamente le richieste.

Un TTFB più basso significa che il contenuto viene fornito agli utenti più velocemente, migliorando l’esperienza utente e la percezione della velocità del sito. Ma non è solo l’esperienza utente a beneficiarne: anche i motori di ricerca come Google apprezzano i tempi di risposta più rapidi.

Varnish ed il crawl Budget di Google

Google utilizza una risorsa limitata, conosciuta come “crawl budget”, per indicizzare i siti web. Questo budget è il numero di pagine che Google è in grado di e disposto a esplorare in un determinato periodo di tempo. Un TTFB più basso significa che Google può esplorare e indicizzare più pagine entro questo budget, ottimizzando l’uso delle sue risorse di scansione.

Migliorare il crawl budget può avere un impatto diretto sulla capacità di Google di indicizzare il tuo sito web in modo tempestivo. Questo, a sua volta, può influenzare positivamente il posizionamento del tuo sito nei risultati di ricerca, poiché un’indicizzazione più completa e tempestiva fornisce a Google una visione più accurata del tuo sito e del suo contenuto. In questo modo, l’uso di Varnish Cache può contribuire a migliorare sia la velocità del sito che il suo posizionamento nei risultati di ricerca.

Statistiche Scansione Google Tempo di risposta

Siti web di alto profilo come The New York Times, BBC, Wikipedia hanno già adottato Varnish Cache per migliorare le loro prestazioni e garantire un’esperienza utente fluida e reattiva.

Varnish e WordPress

WordPress è la piattaforma di blogging più popolare al mondo e Varnish Cache si adatta perfettamente alle sue esigenze. Tuttavia, la gestione di Varnish Cache in un ambiente WordPress può essere complicata. Fortunatamente, ci sono diversi plugin disponibili che possono aiutare in questo processo, tra cui W3 Total Cache e Varnish HTTP Purge.

Nonostante la loro utilità, questi plugin possono presentare dei seri problemi.

W3 Total Cache, ad esempio, può essere estremamente lento nel pulire la cache, specialmente quando si tratta di categorie multiple. Questo può portare a ritardi significativi nella pubblicazione dei post, interferendo con l’attività editoriale e potenzialmente causando errori come Gateway Timeout.

NGINX Gateway Timeout

Varnish HTTP Purge, pur essendo più snello e focalizzato sulla sola funzione di pulizia della cache, ha dimostrato in diverse occasioni di essere inaffidabile. Invece di pulire la cache in modo selettivo e granulare, spesso pulisce l’intera cache, il che può avere un impatto significativo sulle prestazioni del sito.

Per risolvere questi problemi, proponiamo uno snippet di codice PHP da inserire nel file functions.php del vostro tema attivo WordPress. Questo codice si occupa di pulire la cache Varnish ogni volta che viene pubblicato un post (ad eccezione delle bozze), garantendo che la home page, l’articolo stesso e tutte le categorie correlate vengano correttamente aggiornate.

Il codice proposto non pretende di trattare installazioni WordPress con WooCommerce installato, tassonomie prodotti, tag AMP o API; tuttavia, è piuttosto semplice da comprendere e facilmente estendibile per adattarsi alle più disparate esigenze.

Il Codice PHP per WordPress per fare il PURGE di Varnish.

// Funzione che pulisce la Cache Varnish tramite metodo PURGE su socket RAW senza l'utilizzo di cURL


function purgeURL($URL) {

$varnishIP = "127.0.0.1";
$varnishPORT = "80";

$hostwp = trim(str_replace( array( 'http://', 'https://' ), '', get_option('siteurl')), '/' );

// Open the socket
$errno = ( integer) "";
$errstr = ( string) "";
$varnish_sock = fsockopen( "127.0.0.1", "$varnishPORT", $errno, $errstr, 10);

// Prepare command to send
$cmd = "PURGE $URL HTTP/1.0\r\n";
$cmd .= "Host: $hostwp\r\n";
$cmd .= "Connection: Close\r\n";
$cmd .= "\r\n";

// Send the request
fwrite( $varnish_sock, $cmd);

// Close the socket
fclose( $varnish_sock);
}

// In fase di salvataggio POST recupero gli slug delle categorie che contengono il post, ed invoco la pulizia della cache Varnish
// tramite la funziona purgeURL

function pulisci_cache_categorie ($post_id){

if ( wp_is_post_revision( $post_id ) ) {
return;
}

$categories = get_the_category($post_id);

// Inizializzare un array vuoto per i permalink
$relative_permalinks = array();

// Iterare su ogni categoria
foreach ($categories as $category) {
// Ottenere il permalink della categoria e convertirlo in un URL relativo
$relative_permalink = wp_make_link_relative(get_category_link($category->term_id));

// Aggiungere l'URL relativo all'array
$relative_permalinks[] = $relative_permalink;
}

foreach($relative_permalinks as $relative_permalink) {
purgeURL ($relative_permalink);
}

}

add_action( 'save_post', 'pulisci_cache_categorie' );

Il codice fornito è scritto in PHP e fa parte del file functions.php di un tema WordPress. Questo codice definisce due funzioni: purgeURL() e pulisci_cache_categorie().

  • purgeURL($URL): Questa funzione è progettata per interfacciarsi con un server Varnish, un acceleratore di applicazioni web molto potente, per invalidare o “pulire” una particolare URL dalla cache. Il server Varnish è configurato per risiedere in locale (“127.0.0.1”) e comunicare sulla porta 80. La funzione crea una connessione socket con il server Varnish e invia un comando “PURGE” per l’URL specificato. Questo comando dice a Varnish di rimuovere qualsiasi cache corrispondente a quell’URL, costringendo Varnish a recuperare una nuova copia della pagina la prossima volta che viene richiesta. Dopo aver inviato il comando, la funzione chiude la connessione socket.
  • pulisci_cache_categorie($post_id): Questa funzione è collegata all’azione WordPress ‘save_post’, che si attiva ogni volta che un post viene salvato. Quando un post viene salvato, questa funzione viene chiamata con l’ID del post come argomento. Se il post è una revisione (cioè, non è la versione “live” del post), la funzione termina subito. Altrimenti, recupera tutte le categorie a cui il post appartiene e costruisce un array di URL relative corrispondenti a queste categorie. Per ciascuna di queste URL, chiama la funzione purgeURL(), causando la rimozione di queste pagine dalla cache Varnish. Questo assicura che, quando un post viene modificato, tutte le pagine delle categorie che includono quel post vengono aggiornate nella cache, riflettendo così le modifiche al post.

Queste funzioni lavorano insieme per assicurarsi che le modifiche ai post in WordPress vengano riflesse tempestivamente nelle pagine delle categorie, pur mantenendo i vantaggi delle prestazioni di una cache web come Varnish.

Un occhio di riguardo alle prestazioni grazie a fsockopen().

Nel contesto delle chiamate di rete in PHP, fsockopen() e cURL sono due metodi popolari per effettuare richieste HTTP. Mentre cURL è noto per la sua versatilità e l’ampia gamma di opzioni di configurazione, fsockopen() può offrire vantaggi in termini di velocità in determinati scenari.

fsockopen() apre un socket diretto a un server, permettendo una comunicazione a basso livello più veloce e meno pesante dal punto di vista delle risorse. Questo può essere particolarmente vantaggioso quando si effettuano molte richieste simultanee o si hanno esigenze di latenza molto bassa. Inoltre, fsockopen() può essere più veloce nelle situazioni in cui la risposta del server non è necessaria o può essere ignorata, poiché non è necessario aspettare che la risposta venga restituita e processata come sarebbe con cURL.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto