这简直要把我逼疯了我们在Apache上运行Wordpress(如果不明显的话,我们是这个堆栈的新手)。具体来说,这是一个Bitnami AMI。由于我们几乎100%使用AWS,所以我想在WordPress网站前面使用Cloudfront动态内容缓存。我已经阅读了大量关于如何使用W3 Total Cache(或类似)来实现这一功能的文档/帖子。但我真正想做的是掌握Cache-Control头,这样我就可以让Cloudfront按照它应该的方式工作。
目前,我已经修改了functions.php以包含代码(基于这里的另一篇文章),该代码应该修改头部。
function varnish_safe_http_headers() {
session_cache_limiter('');
header_remove("Cache-Control");
header("Cache-Control: public, max-age=60");
if( !session_id() )
{
session_start();
}
}
add_action( 'template_redirect', 'varnish_safe_http_headers' );
不幸的是,我最终得到的是两个标题。
Cache-Control:public, max-age=60
Cache-Control:max-age=0, no-cache
第一个头是我的。第二个头来自堆栈中的其他位置,我似乎无法找到/配置。我已经搜索了Wordpress目录的全部内容,寻找任何我能想到的可以帮助我找到执行此操作的代码的字符串。
我还尝试将add_action调用中的“hook”更改为任意数量的值,从“send_headers”开始一直到“send_headers”。唯一的结果是两个缓存控制头改变了顺序。到目前为止,我无法删除/覆盖“max-age=0,no-cache”值。
我也尝试过修改.htaccess,Bitnami特有的htaccess.conf文件等等。
EDIT:阅读完here,第二个头应该是WordPress/PHP中的某个地方引起的。这篇文档让“处理程序”(在本例中是PHP)在响应处理方面拥有最终决定权。这个阶段完成后,只需要将响应发送到客户端并记录日志。
编辑2:我在站点根目录下添加了一个foo.php文件。它根本不调用任何WordPress函数。两个Cache-Control标头仍然显示。以下是文件的全部内容。
<?php
header("Cache-Control: public, max-age=60");
?>
3条答案
按热度按时间vmdwslir1#
Apache的mod_pagespeed是罪魁祸首。默认设置为
Cache-Control: no-cache, max-age=0
。您需要更新
apache2/conf/pagespeed.conf
以包括然后运行这个来重新启动Apache
参考文献:
6ie5vjzr2#
答案是重新开始。我构建了一个全新的AWS Linux示例,并自己安装了Apache,MySql,PHP和Wordpress。我在.htaccess中使用自己的配置来根据文件类型设置Cache-Control头。我安装了mod_pagespeed来帮助处理不称职的内容作者上传的巨型图像。然后我浪费了大量的时间来修复所有帖子中的图像URL。唯一安装的Wordpress插件是导入/导出插件(这样我就可以从旧服务器上获取所有内容)和一个“滑块”插件,允许用户在帖子中浏览图片。
现在我终于可以在WordPress面前正确使用Cloudfront了。如果你想做同样的事情,帮你自己一个忙,跳过所有的超级骗子,whiz-bang缓存插件。完全没必要。
7y4bm7vi3#
我发布这个解决方案是因为这个页面显示为搜索“WordPress缓存控制头”时的第一个结果之一。
如果您在WordPress网站健康报告中看到您的网站没有使用缓存控制头,那么您可以修改WordPress生成的头,而不是更改Apache config或.htaccess。在撰写本文时,WordPress仅在管理 Jmeter 板中生成缓存控制头。缓存之外的数据应该由插件或自定义解决方案处理,如下所示。
以下解决方案将:
1.更改WordPress标题以启用客户端缓存控制
1.如果用户不在管理控制面板中。
这将适用于不经常更新的网站。可以通过降低“max-age”值或更细粒度地了解哪些请求路径(主页与发布页面)被缓存以及缓存多长时间来改进解决方案。