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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .