我尝试使用CloudFront将整个站点缓存,ELB和EC2作为后端。 url的响应头我总是从X-Cache中错过:
Cache-Control:max-age=0
Cache-Control:public
Connection:keep-alive
Content-Encoding:gzip
Content-Length:12501
Content-Type:text/html
Date:Tue, 08 Sep 2015 07:16:56 GMT
Expires:Tue, 08 Sep 2015 07:16:56 GMT
Server:nginx
Vary:Accept-Encoding
Via:1.1 e5f2e8167f4cb891927a3b8ab905bfaf.cloudfront.net (CloudFront)
X-Cache:Miss from cloudfront
配置网络服务器(Nginx):
server {
listen 80;
server_name somedomain.com www.somedomain.com;
access_log /var/log/nginx/access.log;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header $Set_Cookie;
location ~ / {
add_header Cache-Control "public";
add_header X-Cache-Status $upstream_cache_status;
expires 0;
proxy_pass http://my_stream;
}
}
对于使用costumize的云端I的默认(*)行为的对象缓存:
Minimum TTL 200
Maximum TTL 400
Default TTL 320
标头的和白名单是:
Host
CloudFront-Is-Desktop-Viewer
CloudFront-Is-Mobile-Viewer
CloudFront-Is-Tablet-Viewer
如果我直接指向文件,例如:http://somedomain.com/a_file.php,我将获得X-Cache:点击进行下一次刷新。但如果只有http://somedomain我只获得X-Cache:来自云端的小姐
我的配置有什么错过吗?
答案 0 :(得分:0)
CloudFront min / max / default ttls不会覆盖原始服务器似乎返回的内容:
Cache-Control: max-age=0
这会覆盖所有默认值。
要更改单个对象的缓存持续时间,您可以配置源以向对象添加
Cache-Control max-age
或Cache-Control s-maxage
指令或Expires
标头字段。http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html