我正在使用 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 ...
例如,按适当的顺序排列过滤器。