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.