我使用AWS Cloudfront提供图像。原始图像标头包括缓存控制设置,但这些标头不会转移到AWS。我检查了AWS文档,我认为我的Cloudfront设置是正确的:
设置对象缓存:使用原始缓存标头
我创建了一个页面,您可以在其中看到相同的图像,直接从其原点加载,并由Cloudfront加载。如您所见,第二个图像不包含Cache-Control标头设置:
https://www.fanaticguitars.com/cache-control-test.php
有什么建议吗?
谢谢。
答案 0 :(得分:1)
错误配置在您的服务器上,而不在CloudFront上。
如果我连接到您的www
服务器,然后撒谎并告诉它我通过设置HTTP img
来要求www
而不是Host:
header(CloudFront在获取内容时正在执行的操作,如果您在缓存行为中将Host:
标头列入白名单),在这种情况下,您的服务器不会返回Cache-Control
标头,当请求定位到www
时,它会(两次!)。
这是与您的服务器的连接,而不是与CloudFront的连接:
$ curl -v https://www.fanaticguitars.com/v2/avatar.png -H 'Host: img.fanaticguitars.com' > /dev/null
> GET /v2/avatar.png HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Accept: */*
> Host: img.fanaticguitars.com
>
< HTTP/1.1 200 OK
< Server: nginx
< Date: Thu, 09 Mar 2017 16:49:31 GMT
< Content-Type: image/png
< Content-Length: 9915
< Last-Modified: Wed, 01 Mar 2017 21:46:59 GMT
< Connection: close
< Accept-Ranges: bytes
<
* Closing connection #0