Назад | Перейти на главную страницу

Apache mod_expires не устанавливает правильную дату истечения срока действия

У меня проблема с mod_expires. Я просто устанавливаю срок действия по умолчанию 1 день, а затем устанавливаю срок действия по типу (для изображений и аудио).

Так, например, я установил ExpiresByType image / jpeg «доступ плюс 1 месяц». Проблема в том, что каждая страница имеет правильный Expires DateTime, поэтому срок его действия истекает плюс 1 день, но для изображений и аудио (image / jpeg, image / png, audio / mpeg) истекает срок действия 12 часов. Это моя конфигурация:

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


....
    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
    </Location>
....

Затем я пытаюсь добавить другое местоположение и не использую ExpiresByType, но все равно безуспешно. Вот что я пробую:

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

Заголовок Cache-Control имеет правильный максимальный возраст, но срок действия по-прежнему составляет 12 часов.

Затем я пытаюсь установить его вручную, поэтому пробую что-то вроде:

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

И хорошо, что это работает, но мне нужно установить его на 1 месяц / год с момента последнего доступа.

Apache выполняет прокси-доступ только к веб-серверу Gunicorn, который фактически обслуживает текущее приложение.

Я столкнулся с той же проблемой, я не мог понять, какой модуль устанавливает заголовок Expires на 12 часов. Я решил вообще не использовать mod_expires. (даже после того, как я отключил модуль mod_expires, по-видимому, другой модуль сидел в заголовках Expire, я не смог найти, какой модуль это сделал)

Итак, как я подошел к проблеме:

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
</FilesMatch>

Можно установить любое количество блоков FilesMatch.