Auf Grund der Einrückungen gehe ich davon aus, Du hast IfModule
gesetzt:
<IfModule mod_expires.c>
ExpiresActive on
# …
</IfModule>
Erlaube dem Proxy noch das Cachen mit:
<IfModule mod_headers.c>
Header set Cache-Control "public"
</IfModule>
Was mir aber unklar ist: Du lieferst die Seite doch via HTTPS aus. Das führt zu der Frage:
Wie (Wo!) hast Du denn die Server-Keys hinterlegt?
Die Sache ist nämlich die, dass in dem Fall ENTWEDER die Keys und Zertifikate auf dem Reverse-Proxy liegen ODER dieser die Requests und die Antworten zwischen dem Webserver und den Clients einfach 1:1 durchreicht (also abgesehen von proxy_pass
nichts tut, insbesondere nichts cacht - ergo nur eine sinnlose Umleitung, mithin entgegen der Absicht sogar ein „Performancekiller“ ist) - weil er ja nicht in die Verschlüsselung eingreifen kann.
Dann wäre da noch was:
Beim Content-Type Text/HTML erlaubst Du das Cachen für eine Stunde, bei CSS für einen Tag bei JS für eine Woche. Das ist unlogisch und kann zu weitere[m|n] „Wundern“ führen, denn oft werden, wegen der engen Verzahnung, diese Dateien zum gleichen Zeitpunkt geändert. Diese Angaben sollten also übereinstimmen damit Benutzer im Falle von Änderungen wenigstens eine Chance haben, die zueinander passenden Dateien zu bekommen.
Empfehlungen:
Diese Einstellungen wirken auch bei „dynamischen“ Output, z.B. von PHP-Skripten. Wenn ein solches z.B. „Text/HTML“ signalisiert bekommt das vom Server auch die dafür vorgesehenen Header. Das ist womöglich falsch - z.B. wenn etwas wie echo date('Y-m-d H:i:s')
darin vorkommt.
Für mich wäre das, neben der Performance, ein Grund, statt auf ExpiresByType
zu setzen, wie folgt zu notieren:
<IfModule mod_headers.c>
<Files ~"\.(html|htm|css|js)$">
Header set Cache-Control "public,must-revalidate"
Header set Expires "A3600" # 60*60 = 1Stunde
</Files>
<Files ~ "\.(gif|jpe?g|png|ico|tiff|pnm|pnb)$">
Header set Cache-Control "public,no-transform"
Header set Expires "A2592000" #60*60*24*30 = 30 Tage
</Files>
</IfModule>
Ich habe mal sinnvollerweise must-revalidate
und no-transform
ergänzt, denn Du willst ja. z.B. sicher nicht, dass ein Proyx die Fotos durch Komprimierung verunstaltet…
Vorteile dieses Vorgehens:
- Das Pattern (
"\.(html|htm|css|js)$"
) ist wohl (bei statischen Ressorcen) auch schneller als die „teure“ Ermittlung des Mime-Types. - Den Zeitpunkt mit strftotime „teuer“ zu errechnen kann man sich auch sparen.
In Skripten (z.B. php) setze ich den Ablauf des oder der Caches dann lieber individuell im Skript selbst. Das Skript ist die Stelle an der ich weiß, ob und wie das Cachen sinnvoll ist…