У меня 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 имеет параметр игнорирования заголовков.