I had problems getting disk_cache to work, and I was not able to see why. This was the relevant section from my config

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

I was timing a request such as the following, but caching seemed not to take effect, since the response used 7 seconds no matter what.

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

After enabling debug logging I found the following statement in the logs, explaining why no caching was being done:

[Fri Aug 24 17:22:01 2012] [debug] mod_cache.c(552): cache: not cached. Reason: Query string present but no explicit expiration time

It turns out this is mentioned in the Apache Caching Guide:

If the URL included a query string (e.g. from a HTML form GET method) it will not be cached unless the response specifies an explicit expiration by including an "Expires:" header or the max-age or s-maxage directive of the "Cache-Control:" header, as per RFC2616 sections 13.9 and 13.2.1.

OK, so I add the following (taken from this article) in Apache

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

It still does not work, this time I get the message

"... not cached. Reason: No Last-Modified, Etag, or Expires headers"

Now, this is a different story. How can I solve this without touching the application server code?

  • So you only want to backend to get a request for that resource once every 9.2 years? Are you absolutely certain? Please clarify what caching behavior you're looking to achieve. – Shane Madden Aug 25 '12 at 21:41

The only way I could get Apache to cache the responses from the application server was by actually adding the headers Apache asked for in the log to the responses. It turned out to be quite easy by creating a JAX-RS filter.

So after adding Last-Modified and an Expires header, the only thing needed was the following two lines in my apache config.

CacheRoot   "/var/cache/apache2/"
CacheEnable disk / 
| improve this answer | |

similar to

Forcing Apache 2.4 to cache files with query string using mod_cache without expires


solved this problem

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.