Almacenamiento en caché de cadenas de consulta en un proxy Apache

Almacenamiento en caché de cadenas de consulta en un proxy Apache

Tuve problemas para que disk_cache funcionara y no pude ver por qué. Esta fue la sección relevante de mi configuración.

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

Estaba cronometrando una solicitud como la siguiente, pero el almacenamiento en caché parecía no surtir efecto, ya que la respuesta usó 7 segundos sin importar qué.

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

Después de habilitar el registro de depuración, encontré la siguiente declaración en los registros, que explica por qué no se estaba realizando ningún almacenamiento en caché:

[Viernes 24 de agosto 17:22:01 2012] [depuración] mod_cache.c(552): caché: no almacenado en caché. Motivo: cadena de consulta presente pero sin tiempo de vencimiento explícito

Resulta que esto se menciona en la Guía de almacenamiento en caché de Apache:

Si la URL incluye una cadena de consulta (por ejemplo, de un método GET de formulario HTML), no se almacenará en caché a menos que la respuesta especifique una caducidad explícita al incluir un encabezado "Expires:" o la directiva max-age o s-maxage del archivo "Cache". -Control:" encabezado, según RFC2616 secciones 13.9 y 13.2.1.

Bien, entonces agrego lo siguiente (tomado deEste artículo) en apache

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

Sigue sin funcionar, esta vez me sale el mensaje

"... no almacenado en caché. Motivo: no hay encabezados de última modificación, etiqueta electrónica o vencimiento"

Ahora bien, esta es una historia diferente. ¿Cómo puedo solucionar esto sin tocar el código del servidor de aplicaciones?

Respuesta1

La única forma en que podía hacer que Apache almacenara en caché las respuestas del servidor de aplicaciones era agregando a las respuestas los encabezados que Apache solicitó en el registro. Resultó bastante fácil creando un filtro JAX-RS.

Entonces, después de agregar el encabezado Last-Modified y Expires, lo único que necesitaba eran las siguientes dos líneas en mi configuración de Apache.

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

Respuesta2

información relacionada