如何解决Google Cloud CDN“强制缓存所有内容”不缓存所有内容
我将 Google Cloud CDN 用于我的 wordpress 网站 https://cdn.datanumen.com。我已启用“强制缓存所有内容”选项。但是,网页、css 文件、javascript 文件仍未缓存。仅缓存图像。
例如我在https://cdn.datanumen.com/处测试页面,我多次使用Ctrl + F5刷新网页,但总是得到相同的结果。
下面是我尝试加载的网页:
响应头中有“Cache-Control”字段,但没有“Age”字段。根据 Google 文档,如果缓存命中并提供缓存内容,则会出现“年龄”字段。所以没有“年龄”意味着文件没有被缓存。
我也检查了日志:
在日志中,cacheFillBytes 为 26776,cacheLookup 为 true。似乎 Google CDN 正在尝试查找缓存并用内容填充缓存。但是 statusDetails 显示“response_sent_by_backend”,因此内容仍然从后端提供。通常这应该只在我第一次访问网站时发生。但是对于我的情况,即使我多次按 Ctrl + F5 刷新我的网站,我也会得到相同的结果,statusDetails 永远不会显示 https://cdn.datanumen.com/
等页面的“response_sent_by_cache”为什么?
更新:
基于 https://cloud.google.com/cdn/docs/caching#non-cacheable_content,如果 vary 标头的值不是 Accept、Accept-Encoding 或 Origin,那么内容将不会被缓存,因为在我的情况下,“vary”标头是“Accept-Encoding, Cookie,User-Agent”,它不会被缓存。但我的问题是如何处理问题,让内容被强制缓存?
更新 2
我已将该站点更改为真正的 wordpress 站点,因为这正是我最终需要的。我打算使用 Google Cloud CDN 购买的支持,看看他们是否可以帮助解决这个问题。
解决方法
根据 Google Cloud CDN 的 documentation,解决问题的最佳方法实际上是使用 CACHE_ALL_STATIC 缓存模式:
-
CACHE_ALL_STATIC:自动缓存没有 no-store 或 private 指令的静态内容。设置有效缓存指令的源响应也被缓存。这是使用 gcloud 命令行工具或 REST API 创建的启用 Cloud CDN 的后端的默认行为。
-
USE_ORIGIN_HEADERS:需要原始响应来设置有效的缓存指令和有效的缓存标头。没有这些指令的响应是从源转发的。
-
FORCE_CACHE_ALL:无条件缓存响应,覆盖由源设置的任何缓存指令。如果后端提供私有的、针对每个用户的内容(例如动态 HTML 或 API 响应),则此模式不合适。
但在最后一种缓存模式的情况下,关于它的使用有两个警告:
-
当您将缓存模式设置为 FORCE_CACHE_ALL 时,内容缓存的默认生存时间 (TTL) 为3600 秒(1 小时),除非您明确设置不同的 TTL。接受 1 小时的新默认 TTL 可能会导致一些以前被认为是新鲜的条目(由于来自原始标头的 TTL 更长)现在被认为是陈旧的。
-
FORCE_CACHE_ALL 模式会覆盖缓存指令(Cache-Control 和 Expires),但不会覆盖其他源响应标头。特别是,Vary 标头仍然受到尊重,并且即使在 FORCE_CACHE_ALL 存在的情况下也可能抑制缓存。如需了解详情,请参阅不同的标头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。