Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django S3中的图像存储和安全服务_Django_Amazon S3_Amazon Cloudfront_Fileserver - Fatal编程技术网

Django S3中的图像存储和安全服务

Django S3中的图像存储和安全服务,django,amazon-s3,amazon-cloudfront,fileserver,Django,Amazon S3,Amazon Cloudfront,Fileserver,我正在建立一个照片网站,用户可以上传照片,并使用它查看以后。这些照片不是公开和私人的。我正在S3中存储照片和缩略图。目前,我遵循的实现是,当用户来到页面时,我提供缩略图的签名URL,并从S3加载(尽管我也在考虑使用cloudfront的签名URL) 现在的问题是: 在每个请求中,为每个缩略图提供不同的url,因此无法使用浏览器缓存。这使得浏览器在用户刷新站点时再次加载每个图像。它使我们的页面变慢 这还造成了另一个问题,即如果有人窥探到源文件和所有文件,他可以找到照片的签名url,并将其分发给其

我正在建立一个照片网站,用户可以上传照片,并使用它查看以后。这些照片不是公开和私人的。我正在S3中存储照片和缩略图。目前,我遵循的实现是,当用户来到页面时,我提供缩略图的签名URL,并从S3加载(尽管我也在考虑使用cloudfront的签名URL)

现在的问题是:

  • 在每个请求中,为每个缩略图提供不同的url,因此无法使用浏览器缓存。这使得浏览器在用户刷新站点时再次加载每个图像。它使我们的页面变慢
  • 这还造成了另一个问题,即如果有人窥探到源文件和所有文件,他可以找到照片的签名url,并将其分发给其他人查看(尽管签名url仅持续10分钟)。我更希望的是,url由我的应用程序传递,这样我就可以决定是否允许用户使用
请帮助我采取什么样的方法,我希望页面加载时间要快,也服务于安全问题。我还想知道,即使每次使用不同的签名url,从cloudfront提供的服务是否会比浏览器缓存(我在某个地方读过)更快。
在你的回答中,请随意描述。

我认为没有一个完美的答案来回答你想要的。一些随机的想法/权衡:

1) 切换到HTTPS。这样你就可以忽略嗅探URL的人。但是HTTPS项目不能在浏览器中缓存很长时间

2) 如果您正在发送已签名的URL,请不要将expires=“time+10m”设置为“time+20m,并四舍五入到最接近的10m”。这样,URL将保持不变至少10米,浏览器可以缓存它们。(还要确保在S3中的文件上设置expires:header,以便浏览器知道可以缓存这些文件。)

3) 您可以代理所有URL。让浏览器从服务器请求照片,然后编写一个web代理,将请求代理到S3中的照片。在此过程中,您可以检查用户身份验证,为S3生成签名URL,甚至在本地缓存照片。)这对您来说似乎“效率较低”,但它可以让浏览器缓存您的URL,只要他们愿意。这对你的用户来说也很方便,因为他们可以为照片URL添加书签,而且总是有效的。即使他们移动到另一台计算机,他们也会点击你的服务器,让他们在显示照片之前登录

确保使用“事件”服务器,如PythonTwisted或Node.js。这样,您可以同时代理数千张照片,而无需在服务器上使用大量内存/CPU。(由于所有数据都通过服务器传输,您将使用大量带宽。但您可以通过运行多台服务器轻松“扩展”。)

4) Cloudfront是一个缓存。第一次从CF服务器请求资源时,速度会变慢(几百毫秒)。但是不要期望第二个请求被缓存!每个CF位置都有大约20台不同的服务器,每次您都会随机点击一台。因此,请求一张照片10次可能会导致10次缓存未命中,而在下一次请求中,您仍然只有50%的机会获得缓存命中。CF仅适用于将被请求数百次的流行内容。CF对于外国用户来说有些有用,因为专用CF-to-S3连接可能比普通互联网更好

我不确定你会怎样帮你做安全检查。但是如果您通过S3身份验证(不是默认的),那么您可以使用“mod 10 minutes”技巧生成可以缓存10分钟的URL

CF不可能“比浏览器缓存快”。但是,如果您不使用浏览器缓存,CF可能比S3快,但大多在国外

看看其他人都做了些什么(例如,我认为smugmug使用S3)。

可能重复的