使用 Apache 剥离 Tomcat 标头,然后将资源缓存到磁盘?

使用 Apache 剥离 Tomcat 标头,然后将资源缓存到磁盘?

我在 Apache 中让 mod_disk_cache 运行良好。它缓存了来自 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"

答案1

查看 Tomcat servlethttps://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/ExpiresFilter.html. 它适用于你们两种情况。

另外,Mod_cache 有一个忽略标题选项。

答案2

我搞明白了。下面介绍如何通过 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>

相关内容