Zwischenspeichern von Abfragezeichenfolgen in einem Apache-Proxy

Zwischenspeichern von Abfragezeichenfolgen in einem Apache-Proxy

Ich hatte Probleme, disk_cache zum Laufen zu bringen, und ich konnte nicht sehen, warum. Dies war der relevante Abschnitt aus meiner Konfiguration

# Caching
CacheRoot   "/var/cache/apache2/"
CacheEnable disk /

Ich habe die Zeit für eine Anfrage wie die folgende gemessen, aber die Zwischenspeicherung schien nicht wirksam zu sein, da die Antwort in jedem Fall 7 Sekunden dauerte.

time curl -k https://customer1.myhosts.com/appserver/slow_request?param1=fooBar

Nachdem ich die Debug-Protokollierung aktiviert hatte, fand ich in den Protokollen die folgende Aussage, die erklärte, warum kein Caching durchgeführt wurde:

[Fri Aug 24 17:22:01 2012] [debug] mod_cache.c(552): Cache: nicht zwischengespeichert. Grund: Abfragezeichenfolge vorhanden, aber keine explizite Ablaufzeit

Es stellt sich heraus, dass dies im Apache Caching Guide erwähnt wird:

Wenn die URL eine Abfragezeichenfolge enthält (z. B. aus einer GET-Methode eines HTML-Formulars), wird sie nicht zwischengespeichert, es sei denn, die Antwort gibt ein explizites Ablaufdatum an, indem sie einen „Expires:“-Header oder die max-age- oder s-maxage-Direktive des „Cache-Control:“-Headers gemäß RFC2616, Abschnitte 13.9 und 13.2.1, einschließt.

OK, ich füge also Folgendes hinzu (entnommen ausDieser Artikel) in Apache

Header set Cache-Control "max-age=290304000"

Es funktioniert immer noch nicht, dieses Mal bekomme ich die Meldung

„… nicht zwischengespeichert. Grund: Keine Last-Modified-, Etag- oder Expires-Header“

Das ist nun eine andere Geschichte. Wie kann ich das Problem lösen, ohne den Code des Anwendungsservers zu berühren?

Antwort1

Die einzige Möglichkeit, Apache dazu zu bringen, die Antworten vom Anwendungsserver zwischenzuspeichern, bestand darin, den Antworten die Header hinzuzufügen, die Apache im Protokoll angefordert hatte. Das ging ganz einfach, indem man einen JAX-RS-Filter erstellte.

Nachdem ich also „Last-Modified“ und einen „Expires“-Header hinzugefügt hatte, waren in meiner Apache-Konfiguration nur noch die folgenden beiden Zeilen erforderlich.

CacheRoot   "/var/cache/apache2/"
CacheEnable disk / 

Antwort2

verwandte Informationen