Mettere in cache una pagina già renderizzata trasforma una richiesta da 400 ms in una da 5 ms. Vuol dire anche che tutti ricevono la stessa pagina: esattamente giusto per un articolo ed esattamente sbagliato per un carrello, una dashboard o qualsiasi cosa che pronunci il nome del visitatore.

La regola

Metta in cache una risposta solo se sarebbe identica per uno sconosciuto. Se una qualunque sua parte dipende da chi la chiede, o non la metta in cache, o tolga quella parte dall'HTML in cache e la vada a prendere a parte.

Che cosa non va mai messo in cache

  • Tutto ciò che sta dietro un accesso, compresa la pagina che mostra lo stato di accesso nell'intestazione.
  • Le pagine carrello, cassa, account e ordini.
  • Tutto ciò che contiene un token CSRF: un token condiviso non è un token. Veda CSRF e moduli.
  • I risultati di ricerca che contengono cronologia personale.

Dica alla cache che cosa varia

# skip the cache when a session cookie is present
fastcgi_cache_bypass $cookie_session $http_authorization;
fastcgi_no_cache   $cookie_session $http_authorization;

Dimostri quale le è arrivata

add_header X-Cache-Status $upstream_cache_status;

curl -sSI https://yourdomain.com/ | grep -i x-cache

HIT, MISS e BYPASS in quell'intestazione rispondono in un secondo a ciò cui un pomeriggio di configurazione letta non risponderà. Se una pagina con l'utente autenticato dice HIT, si fermi e la sistemi prima di fare qualunque altra cosa.

L'altra metà: l'invalidazione

Una cache che non viene mai svuotata mostra il prezzo di ieri. Svuoti alla pubblicazione, e sappia svuotare tutto a mano quando un deploy cambia i template.

Provi da autenticato, in una finestra normale, non in incognito. Quasi ogni fuga di cache di questo tipo l'ha trovata un cliente e non lo sviluppatore, perché lo sviluppatore aveva provato solo da disconnesso.
Sull'hosting EGPHP la cache di pagina è configurata con i percorsi di accesso e di cassa già esclusi. Questo articolo riguarda un VPS dove le regole le scrive lei.