我在使 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」的max-age 或s-maxage 指令來指定顯式過期時間。
好的,所以我添加以下內容(摘自本文)在阿帕契
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 /