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

Удалить заголовки Tomcat с помощью Apache, а затем кэшировать ресурсы на диск?

У меня mod_disk_cache отлично работает в Apache. Он кеширует некоторые запросы, исходящие от Tomcat. Но по разным причинам, которые я не буду вдаваться в подробности, мы не можем заставить Tomcat отбрасывать заголовки Expires и Cache-Control для других частей контента. Для этих заголовков установлено значение no-cache и 0. Мне нужно изменить или отбросить их, потому что Apache mod_cache не будет кэшировать содержимое, если у него установлены эти заголовки.

Моя идея состоит в том, чтобы настроить Apache для удаления заголовков, а затем перейти к mod_cache. Или, если есть способ указать mod_cache игнорировать заголовки управления кешем, это тоже сработает.

Для этого подойдут два экземпляра Apache. Я бы предпочел иметь два виртуальных хоста и один прокси-сервер для другого. Возможно, я смогу сделать это всего с одним VH. Как бы выглядел конфиг?

Следующее не помогло. Он удаляет заголовки, доставленные клиенту, но ресурс, проксируемый через ajp, не кэшируется на диск. Я думаю, он сначала оценивает mod_cache, видит заголовок nocache, отказывается кешировать, а затем выполняет полосу заголовка.

Header unset Expires
Header unset Cache-Control

LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
    LoadModule cache_disk_module modules/mod_cache_disk.so
        <IfModule mod_cache_disk.c>
            CacheRoot "/www/cache"
            CacheEnable disk  "/"
            CacheDirLevels 5
            CacheDirLength 3
        </IfModule>
</IfModule>

ProxyPass "/myappdir" "ajp://localhost:8009/myappdir"

Я понял. Вот как объединить виртуальные хосты в цепочку через mod_proxy, чтобы первый из них вырезал заголовки и переадресовал второму, который выполняет кеширование диска.

<VirtualHost *:80>
        CacheIgnoreCacheControl On
        CacheIgnoreNoLastMod On
        CacheHeader on
        CacheRoot "/var/www/cache"
        CacheEnable disk  "/"
        CacheDirLevels 5
        CacheDirLength 3

        ProxyPass "/" "http://localhost:81/"
        ProxyPassReverse "/" "http://localhost:81/"
</VirtualHost>

<VirtualHost *:81>
        Header unset Expires
        Header unset Cache-Control

        ProxyPass "/mytomcatapp" "ajp://localhost:8009/mytomcatapp"
</VirtualHost>

Загляните в сервлеты Tomcat https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/ExpiresFilter.html. Это работает для вас обоих.

В качестве альтернативы Mod_cache имеет параметр игнорирования заголовков.