Amazon CloudFront并不要求我使对象无效

时间:2017-12-14 16:22:16

标签: ruby-on-rails ruby amazon-web-services amazon-s3 amazon-cloudfront

我在rails应用程序上有一个ruby用户可以上传他们的头像或更改它。首先,我将图像存储在亚马逊s3中,但随后我意识到内容内容正在缓慢提供,并决定使用亚马逊云端。

上传和获取头像没有问题。但是,我可以看到更新的照片立即更改,但我希望通过cloudfront api使其无效。上传图片需要花费大量时间。

此时我无法正确判断是否正确使用云端。

这是我在config / initializer中的carrierwave.rb文件:

 CarrierWave.configure do |config|

  config.fog_provider = 'fog/aws'                        
  config.fog_credentials = {
    provider:              'AWS',                      
    aws_access_key_id:     'key',      
    aws_secret_access_key: 'value',    
    region:                'us-east-1'
  }

  config.storage :fog
  config.asset_host     = 'http://images.my-domain.com'
  config.fog_directory  = 'bucket_name'                          
  config.fog_public     = true
  config.fog_attributes = { cache_control: "public, max-age=315576000" }
end

我无法看到我失踪的东西?我怎样才能确保我正确使用cloudfront?

感谢。

1 个答案:

答案 0 :(得分:1)

您的图片未存储在CloudFront中,而是通过CloudFront的CDN提供。

通过CF提供图像的第一个请求如下:

Browser -> CloudFront -> S3
                          |
Browser <-  CloudFront  <-

对图像的第二个请求看起来像这样:

Browser -> CloudFront
                    |
Browser           <-  

第二个请求永远不会命中CF,因为CF缓存了该URL的结果。

现在,您的头像立即更新可能只是因为它被上传到S3并导致新的URL,因此立即更新。这就是你希望它的工作方式。