为什么 CloudFront return 没有这些相同 URL 的缓存版本?

Why doesn't CloudFront return the cached version of these identical URL's?

我在 eb 上有一个服务器(运行 一个 tomcat 应用程序),我还有一个 CloudFront 缓存设置来缓存重复的请求,这样它们就不会转到服务器。

我设置了两个行为

/artist/search
/Default(*)

并且默认 (*) 设置为:

Allowed Http Methods  :GET,PUT
Forward Headers       :None
Headers               :Customize
Timeout               :84,0000
Forward Cookies       :None
Forward Query Strings :Yes
Smooth Streaming      :No
Restricted View Access:No

所以没有超时,它唯一转发的是查询字符串

但是我可以通过查看 localhost_access_log 文件看到我的服务器 ID 收到了重复的请求:

127.0.0.1 - - [22/Apr/2015:10:58:28 +0000] "GET /artist/cee3e39e-fb10-414d-9f11-b50fa7d6fb7a HTTP/1.1" 200 1351114
127.0.0.1 - - [22/Apr/2015:10:58:29 +0000] "GET /artist/cee3e39e-fb10-414d-9f11-b50fa7d6fb7a HTTP/1.1" 200 1351114
127.0.0.1 - - [22/Apr/2015:10:58:38 +0000] "GET /artist/cee3e39e-fb10-414d-9f11-b50fa7d6fb7a HTTP/1.1" 200 1351114

我还可以从我的 CloudFront Popular Objects 页面上看到有很多对象有时会命中,有时会丢失,包括这些艺术家 url,我原以为只有一个未命中,其余的都被命中

为什么会这样?

更新 更仔细地看,似乎(虽然对此不确定)随着艺术家页面大小的增加而被缓存的可能性较小,但更奇怪的是,即使主艺术家页面更大,它似乎也重新获取该页面中引用的所有内容,例如图标(png),但当艺术家页面很小时则不会。这对我来说是最糟糕的结果,因为大型艺术家页面需要更多处理才能在服务器上创建 - 这就是为什么我首先使用 cloudfront 来尝试避免重新创建这些页面。

您看到的是两个原因的组合:

  1. 每个单独的 CloudFront POP 请求分别对象,因此如果您的查看器位于不同的位置,您可以预期对您的原始服务器的多个查询(并且它们将被遗漏)
  2. 我不确定您正在查看的报告日期范围,但 CloudFront 最终会驱逐不太受欢迎的对象,以便在缓存中为新对象腾出空间