AWS EC2 实例上的 Apache 2.4 反向代理群,定向到 ElastiCache 内存缓存集群进行缓存。非常典型的东西。
CacheDetailHeader 指令已打开,并定期从 hostname.my.domain 发送值“缓存未命中:缓存不愿意存储响应”,而该域对 Google 搜索具有异常抵抗力。
我已经验证了实例和缓存集群之间的连接,并且可以观察实例和集群之间定期的“统计”交互,这些交互似乎很成功。我可以通过 telnet 与服务器交互,因此这部分很可靠。
问题是,Apache 服务器很少尝试“设置”一个值,这让我认为 Apache“愿意”存储响应是个问题。
对于 random-image.png 的 HTTPS 请求,来自上游的响应标头的典型子集如下
Cache-Control: public
Cache-Control: max-age=31535000
ETag: "*(a value)*"
Expires: Tue, 27 Nov 2018 18:38:04 GMT *(24 hours from now)*
没有 Set-Cookie,没有可能阻止缓存的请求标头。
最终的问题是:还有什么可以说服 Apache“不愿意”缓存?
答案1
如果您已为文件类型配置了特定值,则标头要么从 apache 发送,要么从后端(以代码形式)或从后端 HTTP 服务器发送。这些缓存控制标头似乎是默认值,这表明没有明确设置任何内容。是什么在传递内容?我不得不承认,我不得不查找 mod_cache_socache,但它似乎根本没有设置标头。
查看“意愿”,文档表明它可能与您的后端不提供修改日期或哈希或其他新鲜度指标有关。另外,不要将前端标头和缓存内容混淆。在不了解更多信息的情况下,我的猜测是您需要在缓存规则和前端标头规则中进行一些细化。