I'm having a problem with mod_expires. I simply set have a default expires of 1 days and then I set the expires by type (for images and audio).

So for example i set ExpiresByType image/jpeg "access plus 1 months". The problem is that every page has the correct Expires DateTime so it has expires plus 1 days but images and audio (image/jpeg, image/png, audio/mpeg) have an expires of 12 hours. This is my configuration:

<IfModule mod_cache_disk.c>  
CacheRoot /var/cache/apache2/mod_cache_disk  
 CacheDirLevels 2  
CacheDirLength 1

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie
    <Location />
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 1 days"
        ExpiresByType image/jpeg "access plus 1 months"
        ExpiresByType image/png "access plus 1 months"
        ExpiresByType audio/mpeg "access plus 1 months"
        Header merge Cache-Control public
        FileETag All

I then try to add another Location and do not use ExpiresByType but still without success. This is what I try:

<LocationMatch "(.png|.mp3|.jpg|.jpeg)">
         ExpiresActive on
         Header Set Cache-Control "max-age=1678400"
         ExpiresDefault "access plus 1 days"
         FileETag All

The Cache-Control header has the correct max-age but the expires date is still to 12 hours.

I then try to set it manually so I try something like:

Header Set Expires "Thu, 1 Jan 2020 00:00:00 GMT"

And well that's working but I need to set it to 1 months/years from the last access.

Apache only do a proxypass to a gunicorn web server that actually serve the current application.

1 Answer 1


I hit the same problem, I could not figure out which module sets the Expires header to 12 hours. I decided not to use mod_expires at all. (even after I disabled the mod_expires module, aparently another module sat Expire headers, I was not able to find which module did that)

So the way I approached the issue:

Header unset Expires

# Activate browser-caching without the expires module.
Header merge Cache-Control max-age=604800
<FilesMatch "\.(js|css)$">
  Header merge Cache-Control max-age=86400

One can set as many FilesMatch blocks as needed.

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.