Cache-Control für Apache konfigurieren

Schritt-für-Schritt-Anleitung: Sensible Endpunkte mit no-store schützen, personalisierte Bereiche mit private absichern und statische Assets optimal cachen — mit fertigen .htaccess und httpd.conf Konfigurationen.

Apache · Schritt für Schritt

Cache-Control auf Apache einrichten

Apache setzt Cache-Control-Header über das Modul mod_headers. Anders als Nginx, das auf location-Blöcken basiert, bietet Apache zwei Konfigurationswege: Location-Blöcke in der httpd.conf für Server-weite Konfigurationen und .htaccess-Dateien für verzeichnisbasierte Einstellungen.

Diese Anleitung zeigt beide Wege: von der Aktivierung von mod_headers über die Absicherung sensibler Endpunkte bis zur optimalen Caching-Strategie für statische Assets.

1 Schritt 1 von 4

mod_headers aktivieren und global konfigurieren

Apache benötigt das Modul mod_headers, um Cache-Control-Header zu setzen. Aktivieren Sie es mit a2enmod headers und konfigurieren Sie in der .htaccess oder httpd.conf einen sicheren Standard.

.htaccess Globaler Standard
# .htaccess — Cache-Control für sensible Endpunkte
<IfModule mod_headers.c>
    # Globaler Standard: kein Caching
    Header always set Cache-Control "private, no-cache, must-revalidate"
    Header always set Pragma "no-cache"
</IfModule>
mod_headers aktivieren

Führen Sie sudo a2enmod headers && sudo systemctl reload apache2 aus, um das Modul zu aktivieren. Ohne mod_headers werden alle Header-Direktiven ignoriert.

2 Schritt 2 von 4

Sensible Pfade mit no-store absichern

Login-Seiten, API-Endpunkte und Dashboard-Bereiche müssen mit Cache-Control: no-store abgesichert werden. Apache bietet dafür Location-Blöcke in der httpd.conf und SetEnvIf für die .htaccess.

httpd.conf / .htaccess no-store
# httpd.conf — Location-Blöcke für sensible Pfade
<Location "/login">
    Header always set Cache-Control "no-store"
</Location>

<Location "/api/">
    Header always set Cache-Control "no-store"
</Location>

<Location "/dashboard/">
    Header always set Cache-Control "no-store"
</Location>

# SetEnvIf für dynamische Pfad-Erkennung in .htaccess
SetEnvIf Request_URI "^/(login|logout|dashboard|api)/" SENSITIVE_PATH
Header always set Cache-Control "no-store" env=SENSITIVE_PATH
Wenn Sie unsicher sind, ob eine Seite sensible Daten enthält: setzen Sie no-store. Es ist besser zu restriktiv zu cachen als zu liberal. Performance-Einbußen durch fehlende Caches sind in den meisten Fällen vernachlässigbar.
3 Schritt 3 von 4

Statische Assets optimal cachen (immutable)

Versionierte statische Assets — JavaScript-Bundles und CSS-Dateien mit Content-Hash im Dateinamen — können dauerhaft gecacht werden. Apache's FilesMatch-Direktive erlaubt es, Caching-Regeln nach Dateiendung zu definieren.

.htaccess immutable
# Statische Assets — maximales Caching (versioniert)
<FilesMatch ".(js|css|woff2|woff|ttf)$">
    # Versionierte Assets mit Content-Hash — dauerhaft cachen
    Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>

<FilesMatch ".(ico|jpg|png|svg|webp)$">
    # Bilder ohne Hash — kürzere TTL
    Header set Cache-Control "public, max-age=86400"
</FilesMatch>
immutable nur für Dateien verwenden, die sich niemals ändern — d.h. Dateien mit Content-Hash im Namen (z.B. main.4a8b2c.js). Für logo.png oder andere unveränderliche Dateinamen besser max-age=86400 ohne immutable nutzen.
4 Schritt 4 von 4

Konfiguration verifizieren

Nach dem Reload prüfen Sie, ob alle Cache-Control-Header korrekt gesetzt werden. Nutzen Sie curl für einen schnellen Check und die Browser DevTools (Network-Tab → Response Headers) für eine visuelle Prüfung.

Terminal Verifizierung
# 1. Apache-Syntax prüfen
sudo apache2ctl configtest

# 2. Apache neu laden (ohne Downtime)
sudo systemctl reload apache2

# 3. Login-Endpunkt prüfen
curl -sI https://ihre-domain.de/login | grep -i cache-control
# Erwartete Ausgabe: Cache-Control: no-store

# 4. Statische Assets prüfen
curl -sI https://ihre-domain.de/static/main.abc123.js | grep -i cache-control
# Erwartete Ausgabe: Cache-Control: public, max-age=31536000, immutable
Wolf-Agents Scanner als Alternative

Der Wolf-Agents Web Security Check prüft automatisch, ob Cache-Control für sensible Bereiche korrekt konfiguriert ist — als Teil der 166 Prüfpunkte mit 8 Punkten für Cache-Control.

Wie steht Ihre Domain bei Cache-Control?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.

Häufig gestellte Fragen

Wie setze ich Cache-Control in Apache?

In Apache setzen Sie Cache-Control mit der Header-Direktive aus mod_headers. Im <IfModule mod_headers.c>-Block können Sie Header set Cache-Control "no-store" global oder in Location-Blöcken setzen. Die Direktive always stellt sicher, dass der Header auch bei Fehlerantworten gesetzt wird.

Was ist der Unterschied zwischen Header set und Header always set in Apache?

Header set setzt den Header nur bei 2xx- und 3xx-Antworten. Header always set (oder in neueren Versionen das Schlüsselwort always) setzt ihn bei allen Antworten — inklusive 4xx und 5xx. Für Cache-Control: no-store ist always wichtig, da fehlgeschlagene Logins (401, 403) ebenfalls nicht gecacht werden sollen.

Kann ich Cache-Control in .htaccess setzen?

Ja, wenn AllowOverride FileInfo oder AllowOverride All in der httpd.conf gesetzt ist. Die .htaccess-Methode ist einfacher, hat aber einen Performance-Nachteil, da Apache die Datei bei jedem Request liest. Für Produktionsumgebungen sind Location-Blöcke in httpd.conf oder der VirtualHost-Konfiguration zu bevorzugen.

Wie konfiguriere ich Cache-Control für verschiedene Dateitypen in Apache?

Nutzen Sie FilesMatch für Dateiendungen: <FilesMatch "\.(js|css|png|jpg|woff2)$"> Header set Cache-Control "public, max-age=31536000, immutable" </FilesMatch>. Für dynamische Routen nutzen Sie Location-Blöcke: <Location "/api/"> Header always set Cache-Control "no-store" </Location>.

Brauche ich auch den Pragma-Header in Apache?

Pragma: no-cache ist ein HTTP/1.0-Relikt und wird von HTTP/1.1-Browsern ignoriert, wenn Cache-Control gesetzt ist. Für maximale Kompatibilität mit sehr alten Clients können Sie ihn zusätzlich setzen, aber Cache-Control allein ist für alle modernen Browser ausreichend.