Taulant
Taulant

Reputation: 11

Apache 2.4 mod_cache + mod_cache_disk + modjk: 304 Not Modified, but Content-Length modified

I am getting crazy with mod_cache!

My current setup:

Apache 2.4 on Ubuntu with:
- mpm_worker
- mod_jk
- mod_cache
- mod_cache_disk
- mod_expires
- mod_deflate

HTTP & HTTPS Request are balanced by modjk to 5 Tomcat AppServers. I want to cache media assets served by Tomcat Instances, but getting trouble with mod_cache.

My current cache configuration:

    CacheRoot /srv/volatile/cache
    CacheDirLevels 3
    CacheDirLength 2
    CacheEnable disk /medias

    # Currently active:
    CacheQuickHandler off
    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5
    CacheIgnoreHeaders Set-Cookie

    # This is another configuration i tried:
    #CacheIgnoreNoLastMod On
    #CacheIgnoreCacheControl On
    #CacheIgnoreQueryString On
    #CacheIgnoreHeaders Set-Cookie

I checked a lot of tutorials und guides, but without success.

The first request is getting served fine by Apache, following request are failing with weird errors:

Recalled cached URL info header https://...
Recalled headers for URL https://...
Adding CACHE_SAVE filter for /medias...
Adding CACHE_REMOVE_URL filter for /medias...
cache: /media... responded with an uncacheable 304, retrying the request. Reason: contradiction: 304 Not Modified, but Content-Length modified
cache: Removing url https://
Deleting /srv/volatile/cache/.../.header from cache.
Deleting /srv/volatile/cache/.../.data from cache.
Deleting directory /srv/volatile/cache/.../7n from cache.
URL https://... failed the size check (0 < 1)

I thought that it could be a load balancing issue, because of walk threw multiple nodes or something like that, but the behavior isn't deterministic. Tests with apache-bench & jmeter showed me that 60-70% of request failed, so that not exactly every X request failed.

If the CacheIgnoreCacheControl On option is set, requests threw jmeter & apache-bench didn't fail, but access threw Browser failed.

Someone any idea ?

Thanks Taulant

Upvotes: 1

Views: 1009

Answers (2)

Elias Torres Arroyo
Elias Torres Arroyo

Reputation: 2622

The reason of this is behind this line:

responded with an uncacheable 304, retrying the request. Reason: contradiction: 304 Not Modified, but Content-Length modified

Your backend replies correctly a 304 response, but incorrectly replies a Content-Length header, probably with a zero value

Upvotes: 0

dploeger
dploeger

Reputation: 97

I think, this is covered by mod_cache bug 56881, which is fixed in Apache 2.4.11.

Upvotes: 0

Related Questions