Cachear una página entera ya renderizada convierte una petición de 400 ms en una de 5 ms. También significa que todos reciben la misma página: exactamente lo correcto para un artículo y exactamente lo incorrecto para un carrito, un panel o cualquier cosa que diga el nombre del visitante.

La regla

Cachee una respuesta solo si sería idéntica para un desconocido. Si alguna parte depende de quién pregunta, o no la cachee, o saque esa parte del HTML cacheado y tráigala aparte.

Lo que nunca debe cachearse

  • Todo lo que esté tras un inicio de sesión, incluida la página que muestra el estado de sesión en la cabecera.
  • Las páginas de carrito, pago, cuenta y pedidos.
  • Todo lo que lleve dentro un token CSRF: un token compartido no es un token. Vea CSRF y formularios.
  • Los resultados de búsqueda con historial personal dentro.

Dígale a la caché qué varía

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

Demuestre cuál le tocó

add_header X-Cache-Status $upstream_cache_status;

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

HIT, MISS y BYPASS en esa cabecera responden en un segundo lo que una tarde leyendo configuración no responderá. Si una página con sesión iniciada dice HIT, pare y arréglelo antes de hacer ninguna otra cosa.

La otra mitad: la invalidación

Una caché que nunca se vacía enseña el precio de ayer. Purgue al publicar, y sepa purgarlo todo a mano cuando un despliegue cambie las plantillas.

Pruebe con la sesión iniciada, en una ventana normal, no en una privada. Casi todas las fugas de caché de este tipo las encontró un cliente y no el desarrollador, porque el desarrollador solo probó nunca sin sesión.
En el alojamiento de EGPHP, la caché de páginas viene configurada con las rutas de sesión y de pago ya excluidas. Este artículo es para un VPS donde las reglas las escribe usted.