Statische Dateien zu cachen ist die billigste Geschwindigkeit überhaupt: Der Browser fragt gar nicht erst. Das Risiko ist das umgekehrte — ein Stylesheet, ein Jahr lang zwischengespeichert, das Sie dann ändern müssen, auf einem Rechner, an den Sie nicht herankommen.

Die Regel, die langes Caching sicher macht

Cachen Sie aggressiv NUR Dateien, deren Name sich mit ihrem Inhalt ändert. Dann ist eine Änderung ein neuer Name, der alte Cache belanglos, und kein Besucher hält je die falsche Datei in Händen.

/css/site.a1b2c3.css        <- safe to cache for a year
/css/site.css?v=1788541047   <- the same idea, from the file mtime

Was setzen

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 sagt dem Browser, nicht einmal nachzufragen. no-cache auf HTML bedeutet nicht „nicht cachen“, sondern „frag vorher bei mir nach“ — und das ist genau richtig für eine Seite, deren Inhalt sich ändert, ohne dass sich ihre Adresse ändert.

Cachen Sie eine Datei mit gleichbleibendem Namen niemals lange. /css/site.css für ein Jahr zwischengespeichert heißt ein Jahr Besucher auf dem alten Design — und von Ihrer Seite aus können Sie das um keinen Tag verkürzen.

Prüfen, was Sie senden

curl -sI https://yourdomain.com/css/site.css | grep -iE "cache-control|expires|etag"

ETag und Last-Modified

Diese machen die NACHFRAGE billig, statt die Anfrage überflüssig: Der Browser fragt, der Server antwortet 304 Not Modified, und es wird kein Inhalt gesendet. Gut für HTML — und bei Assets die zweitbeste Lösung nach dem Gar-nicht-Fragen.

Hinter einem CDN denken Sie an zwei Caches. Das CDN zu leeren erreicht keinen Browser, der die Datei ein Jahr lang hält — genau deshalb muss sich der Name ändern.