mdr*_*iel 5 proxy ruby-on-rails amazon-s3 paperclip ruby-on-rails-3
为了避免热链接,S3带宽泄露等,我想让我的存储桶保密,并通过Rails应用程序提供文件.概念听起来很容易,但我不完全确定哪种方法最适合这种情况.
我正在使用回形针进行一般资产管理.是否有任何内置方法来实现这种类型的代理?
一般来说,我可以轻松地从回形针解析url并将它们指回我自己的控制器.从这一点来看应该怎么办?我应该只使用Net :: HTTP下载图像,然后使用send_data服务吗?在我之间我想记录referer并设置正确的Control-Cache标头,因为我在应用程序前面有一个反向代理.在这种情况下Net :: HTTP + send_data是否合理?
也许整个想法真的很糟糕,因为我现在还不知道的一些原因?我一般情况下,我认为将直接S3链接暴露在公共桶中是危险的,并且在一些严重问题中会产生泄漏/热链接......
更新:
如果您有任何其他想法可以减少S3账单并防止热链接反正请分享,即使它们与Rails没有直接关系.
使用(私有存储桶|私有文件)并使用签名 URL 指向存储在 S3 上的文件。
签名包括到期时间(例如,从现在起 10 分钟,无论您想设置什么),以及加密散列。如果签名无效或过期时间已过,S3 将拒绝提供文件。
这很有用,因为只有您才能在 S3 中为您的私人文件创建有效的 URL,并且您可以控制 URL 保持有效的时间。这可以防止窃取,因为窃取者无法对他们自己的 URL 进行签名,如果他们获得您签名的 URL,该 URL 将很快过期,之后就无法使用。
小智 5
由于上面没有回答,这里有一个关于如何流式传输存储在S3上的文件的小代码示例.
render :text => proc { |response, output|
AWS::S3::S3Object.stream(path, bucket) do |segment|
output.write segment
output.flush # not sure if this is needed
end
}
Run Code Online (Sandbox Code Playgroud)
根据您的网络服务器,这可能(杂项)或可能不(webrick)工作,所以如果它不在开发流中,请不要太沮丧.
我可能会避免这样做——至少在我别无选择之前。
您需要考虑到,如果每次下载图像,您可能还会增加带宽费用。此外,通过脚本处理每个图像,您还需要更多的 CPU 和 RAM 来执行此操作。恕我直言,这不是最好的前景。
我可能会启用 Amazon S3 的访问日志并编写一个小工具来分析使用情况并更改存储桶/对象的权限,以防使用情况达到顶峰。每 10 分钟左右运行一次这个 cronjob 就可以了?
您还可以使用s3stat。他们还提供免费计划。
编辑:根据我对 Varnish 的建议,我添加了一个指向有关使用 Varnish 防止热链接的博客条目的链接。
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |