rails cloudfront cache expiration

时间:2017-02-20 21:00:25

标签: ruby-on-rails amazon-cloudfront

我现在正在使用cloudfront + S3,正在按预期提供图像,但是云端缓存命中/未命中看起来很糟糕。

重复步骤

  1. 访问网页(网络标签显示x-cache:Hit from cloudfront
  2. curl -I $ same-url(X-Cache: Miss from cloudfront
  3. curl -I $ same-url(X-Cache: Hit from cloudfront
  4. 我希望第一个curl能够显示云端点击,因为浏览器之前显示了云端点击。

1 个答案:

答案 0 :(得分:1)

这很可能是因为Cloudfront会在请求中的Cookie信息中缓存,或者通过User-agentContent-Type等其他标头缓存

  1. 检查您是否在分发设置中将Cookie数据转发到您的来源。如果您这样做,Cloudfront将为每个新会话缓存不同的版本(如果您有rails会话cookie)。
  2. 检查您的设置,了解Cloudfront如何处理请求中的标头。例如。默认情况下,Cloudfront将标头Content-type传递给源服务器。标题和默认行为的完整列表位于http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-headers-behavior
  3. 要查看您提出的请求中的标题:

    <强>铬

    检查开发人员工具中的网络选项卡。在那里你可以看到请求标题。

    <强>卷曲

    -v选项添加到请求

    curl -v -I http://yoursite.com
    

    它将输出类似

    的内容
    > HEAD / HTTP/1.1
    > User-Agent: curl/7.35.0
    > Host: yoursite.com
    > Accept: */*
    

    然后,您可以尝试在curl-request中添加/删除不同的标头,以模仿您的浏览器发出的请求。例如。添加相同的cookie-data:

    curl -v -I -H "Cookie: my_cookie=some_value;" http://yoursite.com
    

    您的方案中最可能的罪魁祸首是Content-type标头,默认情况下不会出现在curl请求中。