使用 mod_cache 和 mod_pagespeed 时的缓存控制

使用 mod_cache 和 mod_pagespeed 时的缓存控制

我正在使用 mod_pagespeed 和 mod_cache。

当 mod_pagespeed 和 mod_cache 均关闭时,我看到以下标题:

缓存控制:公共,最大年龄=7200,必须重新验证

当 mod_pagespeed 处于开启状态且 mod_cache 处于关闭状态时,我会在响应中看到以下标题:

缓存控制:max-age=0,无缓存,必须重新验证

正如预期的那样,pagespeed 已经重写了 cache-control。

但是,当 mod_pagespeed 和 mod_cache 都打开时,我看到以下内容:

缓存控制:公共,最大年龄=7200,必须重新验证

根据文档:

“默认情况下,PageSpeed 使用 Cache-Control: no-cache、max-age=0 来提供所有 HTML,因为对页面所做的转换可能无法在较长时间内缓存。”

为什么当启用 mod_pagespeed 和 mod_cache 时,html 会被缓存?

答案1

在运行 mod_pagespeed 1.11.33.2-0 和运行 mod_cache 的 Apache Httpd 2.4.23 的情况下,似乎出现了一个错误。

由于某些原因,mod_pagespeed 不会重写缓存标头,从而使 html 可以公开缓存。

我使用的解决方法是让端口 81 上的虚拟主机作为没有页面速度的缓存服务器运行。

<VirtualHost *:81>
ProxyPass / ajp://tomcat-ipaddress:8009/
ProxyPassReverse / https://final-hostname/
ModPagespeed off
RemoteIPHeader X-Forwarded-For
CacheEnable disk /
CacheHeader on
</VirtualHost>

在虚拟主机 443 或 80 上,您可以代理 81 上的主机。

 <VirtualHost _default_:443>
 ProxyPass / http://localhost:81/
 ProxyPreserveHost On
 ModPagespeed on
 ProxyPassReverse / https://final-hostname/

答案2

因为默认情况下 mod_cache 在快速处理程序模式下运行:

http://httpd.apache.org/docs/current/mod/mod_cache.html#cachequickhandler

这意味着它在 mod_pagespeed 完成其转换之后触及“最后”响应。

使用

CacheQuickHandler off
AddOutputFilterByType ... 

例如,按适当的顺序排列过滤器。

相关内容