Cachear archivos estáticos es la velocidad más barata que existe: el navegador ni siquiera pregunta. El riesgo es el contrario: una hoja de estilos cacheada un año que luego necesitas cambiar, en una máquina a la que no llegas.
La regla que hace segura una caché larga
Cachea de forma agresiva SOLO los archivos cuyo nombre cambia cuando cambia su contenido. Así un cambio es un nombre nuevo, la caché vieja deja de importar y ningún visitante se queda nunca con el archivo equivocado.
/css/site.a1b2c3.css <- safe to cache for a year
/css/site.css?v=1788541047 <- the same idea, from the file mtime
Qué poner
location ~* \.(css|js|woff2|jpg|png|webp|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~* \.(html|php)$ {
add_header Cache-Control "no-cache";
}
immutable le dice al navegador que ni siquiera revalide. no-cache en el HTML no significa «no cachear»: significa «pregúntame primero», que es justo lo que hace falta para una página cuyo contenido cambia sin que cambie su dirección.
Comprueba lo que estás enviando
curl -sI https://yourdomain.com/css/site.css | grep -iE "cache-control|expires|etag"
ETag y Last-Modified
Estos abaratan la COMPROBACIÓN en vez de hacer innecesaria la petición: el navegador pregunta, el servidor responde 304 Not Modified y no se manda cuerpo. Bien para el HTML, y para los recursos la segunda mejor opción tras no preguntar nada.