我在让 disk_cache 工作时遇到了问题,但我不知道原因。这是我的配置中的相关部分
# Caching
CacheRoot "/var/cache/apache2/"
CacheEnable disk /
我正在对如下请求进行计时,但缓存似乎没有生效,因为无论如何响应都用了 7 秒。
time curl -k https://customer1.myhosts.com/appserver/slow_request?param1=fooBar
启用调试日志记录后,我在日志中发现以下语句,解释了为什么没有进行缓存:
[2012 年 8 月 24 日星期五 17:22:01] [调试] mod_cache.c(552): 缓存:未缓存。原因:查询字符串存在,但没有明确的到期时间
事实证明,Apache 缓存指南中提到了这一点:
如果 URL 包含查询字符串(例如来自 HTML 表单 GET 方法),则不会缓存,除非响应通过包含“Expires:”标头或“Cache-Control:”标头的 max-age 或 s-maxage 指令指定明确的到期时间,如 RFC2616 第 13.9 和 13.2.1 节所述。
好的,所以我添加以下内容(取自本文)在 Apache 中
Header set Cache-Control "max-age=290304000"
它仍然不起作用,这次我收到了消息
“...未缓存。原因:没有 Last-Modified、Etag 或 Expires 标头”
现在,这是一个不同的故事。如何在不触及应用服务器代码的情况下解决这个问题?
答案1
我让 Apache 缓存来自应用服务器的响应的唯一方法是将 Apache 在日志中请求的标头实际添加到响应中。事实证明,通过创建 JAX-RS 过滤器,这相当容易。
因此,在添加 Last-Modified 和 Expires 标头后,唯一需要的就是我的 apache 配置中的以下两行。
CacheRoot "/var/cache/apache2/"
CacheEnable disk /