关于将Amazon CloudFront和/或S3用作映像服务器的问题(与标准Apache服务器相比)

时间:2012-10-04 22:36:28

标签: php apache amazon-s3 amazon-cloudfront

目前,我有一个网站,它从Apache服务器提供动态(PHP-MySQL)内容,并从单独的Lighthttpd服务器提供静态内容(JavaScript,图像)。

出于规模原因,我想使用Amazon Cloudfront和S3。说实话,我不完全确定S3或CloudFront是如何工作的。我已经习惯了“上传文件......它变得可用”的正常服务器行为,S3“桶”和CloudFront边缘镜像令人生畏。

我需要更好地了解其工作原理并提出一些问题:

1)我不想在我自己的服务器上存储任何图像。我希望他们完全在云端。我是否正确,这意味着我需要使用S3作为“原始服务器”进行存储? CloudFront本身还不够吗? CloudFront只是边缘CDN服务吗?

2)我们目前通过PHP脚本上传图像,FTP脚本将它们FTP到我们的图像服务器,或通过手动FTP上传。如果我使用S3,这将如何改变?我听说你不能FTP到它? :(

3)如果使用S3,我还可以创建分层目录并在其中存储图像吗?图像存储在各种文件夹深处,我无法更改代码,但我听说S3是一个扁平的“桶”?

4)最后,我听说使用CloudFront,如果文件发生变化,您必须发出无效请求,这需要花钱。这是因为CloudFront从原点缓存图像吗?我不习惯这个,因为在我目前的设置中,我只是通过FTP替换图像并更新!有没有办法模仿这种经典行为?

真诚地感谢您的帮助。

2 个答案:

答案 0 :(得分:19)

  

1)我不想在我自己的服务器上存储任何图像。我希望他们完全在云端。我是否正确,这意味着我需要使用S3作为“原始服务器”进行存储? CloudFront本身还不够吗? CloudFront只是边缘CDN服务吗?

S3专为长期,可靠的数据存储而设计,具有eleven 9s的持久性。 Buckets(因为它们被称为)是特定于区域的,并且位于Amazon's regional data centers之一。

相反,CloudFront被设计为一系列边缘服务器。默认情况下,当您从CloudFront主机名请求对象(即文件)时,该对象将从原始位置拉出并缓存在最近的CloudFront边缘位置24小时(这可以通过编程方式进行调整)。在24小时结束时,缓存过期,CloudFront将在下次请求该对象时提取新的副本。

常见设置是将CloudFront配置为使用S3作为其原始位置。 CloudFront还可以使用任何服务器,如果这是你喜欢的(听起来你不喜欢)。

  

2)我们目前通过PHP脚本上传图像,FTP脚本将它们FTP到我们的图像服务器,或通过手动FTP上传。如果我使用S3,这将如何改变?我听说你不能FTP到它? :(

S3不是FTP服务器,因此它不会说(S)FTP协议。但是,几乎所有适用于Mac OS X的FTP客户端都支持Amazon S3。 Amazon S3有一个Web服务API,因此如果您愿意,可以使用其中一个AWS SDK自动执行推送。

一个工具Cyberduck可以执行SSH,SFTP,FTP,Amazon S3和其他一些工具。它适用于Mac和Windows。还有其他工具可以提供用于上传到S3的GUI,就像您通过FTP上传一样。

  

3)如果使用S3,我还可以创建分层目录并在其中存储图像吗?图像存储在各种文件夹深处,我无法更改代码,但我听说S3是一个扁平的“桶”?

是和否。

是的,S3是一个平面文件系统,但文件的名称中可能有斜杠。例如,“abc / def / ghi / jkl.txt”实际上不是3个文件夹和文件,而是一个文件名中包含斜杠的文件。大多数GUI工具选择将其可视化为文件夹和子目录,S3 URL看起来就像任何其他URL一样。就个人而言,我从来不需要为S3做任何不同于SFTP的事情。

  

4)最后,我听说使用CloudFront,如果文件发生变化,您必须发出无效请求,这需要花钱。这是因为CloudFront从原点缓存图像吗?我不习惯这个,因为在我目前的设置中,我只是通过FTP替换图像并更新!有没有办法模仿这种经典行为?

右。因为CloudFront 将源文件缓存到最近的边缘服务器。默认情况下,到期时间为24小时,但您可以将其设置为低至1小时,或者甚至可以通过“无效请求”尽快使其到期。我已经看到这需要3到15分钟才能完成,因为CloudFront必须检查所有边缘服务器,以确保它们全部被清除。

如果您不想进行缓存,可以直接使用S3。这是通过FTP替换图像的最接近的等价物,但是你首先失去了使用CDN的所有好处。

根据Amazon CloudFront pricing page

  

“您每月申请失效的前1,000个文件不收取额外费用。此后,您的无效宣告请求中列出的每个文件为0.005美元。”

对于每个文件,一个月内超过1,000个文件无效,这是一分钱。我经常使用CloudFront并且从不越过这个限制,但是如果你运行的是一个包含大量更改的大型网站,那么它肯定是可能的。

我希望这有帮助! :)

答案 1 :(得分:0)

我测试了各种客户端应用程序,发现用于Windows的CloudBerry S3 Explorer和用于Mac的CrossFTP比Cyber​​duck更强大,但我使用私有流式视频和音频工作很多,所以我的要求比显示图像要高一些一个网站。

但是要回答上一个问题,您可以将包含子文件夹的文件夹拖到存储桶中,从而尊重层次结构。您可以像使用FTP一样在存储桶中处理文件夹。但您必须确保将图像设置为公开,否则图像将无法显示 标准,任何文件都作为私人文件上传,需要签名的URL才能访问它。 但是使用客户端应用程序,您可以设置存储桶的继承,以便文件自动公开。 你可以在这里找到很多关于这方面的信息: http://www.miracletutorials.com/category/s3-amazon-cloudfront/

干杯, 鲁道夫+++