2015-09-05 108 views
0

我有一个Cloudfront发行版,指向一个服务器,它调整了S3存储桶的图像大小。服务器返回的Cache-Control标题为public, max-age=31104000,但我一直收到 miss from Cloudfront,因此图像未在Cloudfront中缓存。尽管Cache-Control Cloudfront没有缓存

为了测试,我设置了另一个直接指向S3存储桶的Cloudfront分配,并确实使用hit from Cloudfront缓存了图像。

我比较了请求和响应头,唯一不同的是,未命中具有Last-Modified头响应,这是从良好的请求丢失。但是,我不确定这是什么问题。

你知道发生了什么吗?这里是标题:

Good Response: 
Age:10 
Cache-Control:public, max-age=31104000 
Connection:keep-alive 
Date:Sat, 05 Sep 2015 16:15:51 GMT 
ETag:"51dbe11a5fa320c4495221b69df1d860" 
Server:AmazonS3 
Via:1.1 b7bc8b4c398aa9f5a08980055c497334.cloudfront.net (CloudFront) 
X-Amz-Cf-Id:4KE-cAoFrTmcjkRW3goZAImvyQE5i1Vl4KZyrWL8HyCk6GcJZ9N7Kw== 
X-Cache:Hit from cloudfront 

Bad Response: 
Cache-Control:public, max-age=31104000 
Connection:keep-alive 
Date:Sat, 05 Sep 2015 16:16:42 GMT 
ETag:"51dbe11a5fa320c4495221b69df1d860" 
Last-Modified:Sat, 05 Sep 2015 16:07:41 GMT 
Server:nginx/1.6.2 
Via:1.1 45578d14a69df96accaab0d1aba82a5a.cloudfront.net (CloudFront) 
X-Amz-Cf-Id:FGMRwDI0vOJQ7aPj83s-RGTO0fg_Zesu7FLo7Ia5vwCxcTZI97ri5A== 
X-Cache:Miss from cloudfront 

Good Request: 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0 .8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,da;q=0.6 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:assets.runemadsen.com 
If-Modified-Since:Sat, 05 Sep 2015 16:07:41 GMT 
If-None-Match:"51dbe11a5fa320c4495221b69df1d860" 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 

Bad Request: 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0 .8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,da;q=0.6 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:images.runemadsen.com 
If-Modified-Since:Sat, 05 Sep 2015 16:07:41 GMT 
If-None-Match:"51dbe11a5fa320c4495221b69df1d860" 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 

任何帮助表示赞赏。

+0

你知道为什么在任何一个响应中没有Content-Length:或Content-Transfer-Encoding标头吗?在“Connection:keep-alive”存在的情况下,它似乎是一个或另一个必须的。如果您的调整器没有发送任何头文件,CloudFront可能会认为收到的响应是未知的有效性。在这种情况下,该对象被缓存,但似乎粗略。 –

+0

为了澄清,您是否在说,如果您一遍又一遍地重复相同的请求,CloudFront会从源中反复提取,并且永远不会从缓存提供服务?您的原始服务器是否返回了'Date:'标题?捕获(并提及)您的原始服务器实际返回的内容可能在此处非常有用。还要验证......您没有配置CloudFront将所有请求标头转发到原始服务器,是吗?这样做[禁用缓存](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html)。 –

回答

0

感谢您的意见。以下是最后的更新:原因是没有Cache-Control的较旧响应被缓存在Cloudfront中,这使得cloudfront不断从源重新加载映像。我不确定缓存的响应究竟是如何触发常量“错过”的,但这就是发生的情况。我使路线无效,Cloudfront开始对图像进行打孔。