使用CloudFront缓存整个站点

时间:2015-09-08 07:32:57

标签: amazon-web-services amazon-cloudfront

我尝试使用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:来自云端的小姐

我的配置有什么错过吗?

1 个答案:

答案 0 :(得分:0)

CloudFront min / max / default ttls不会覆盖原始服务器似乎返回的内容:

Cache-Control: max-age=0

这会覆盖所有默认值。

  

要更改单个对象的缓存持续时间,您可以配置源以向对象添加Cache-Control max-ageCache-Control s-maxage指令或Expires标头字段。

     

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html