使用Amazon CloudFront和/或S3作为图像服务器的问题(与标准Apache服务器相比)

9

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

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

我需要更好地了解这是如何工作的,并有一些问题:

1)我不想在自己的服务器上存储任何图像。我希望它们完全在云中。我是否正确地认为这意味着我将需要使用S3作为“源服务器”进行存储?仅使用CloudFront不足够吗?CloudFront只是边缘CDN服务吗?

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

3)如果使用S3,我是否仍然可以创建分层目录并在其中存储图像?这些图像存储在各种深度的文件夹中,我负担不起更改代码,但我听说S3是一个平面“存储桶”?

4)最后,我听说使用CloudFront,如果文件更改,您必须发出无效请求,这需要花费金钱。这是因为CloudFront从源缓存图像吗?在我的当前设置中,我只需通过FTP替换图像即可更新!没有办法模仿这种经典行为吗?

非常感谢您的帮助。

2个回答

19

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

S3专为可靠长期地存储数据而设计,具有11个9的持久性。Bucket(称为)是特定于区域的,并位于Amazon的区域性数据中心之一。

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

一种常见的设置是将CloudFront配置为使用S3作为其“源位置”。如果您喜欢,CloudFront还可以使用任何服务器(听起来您不希望这样)。 S3不是FTP服务器,因此它不支持(S)FTP协议。但是,几乎所有Mac OS X的FTP客户端都支持Amazon S3。Amazon S3具有Web服务API,因此您可以使用其中一个AWS SDK自动推送。一个名为Cyberduck的工具可以执行SSH、SFTP、FTP、Amazon S3和其他一些功能。它适用于Mac和Windows。还有其他工具可用于提供GUI以使上传到S3就像通过FTP上传文件一样简单。
如果使用S3,我还能创建分层目录并在其中存储图像吗?这些图像存储在各种文件夹中,我不能改变代码,但我听说S3是一个平面“桶”?
是和否。
是的,S3是一个平面文件系统,但文件名可以有斜杠。例如,“abc/def/ghi/jkl.txt”实际上不是三个文件夹和一个文件,而是一个带有斜杠的文件名。大多数GUI工具选择将其视为文件夹和子目录,并且S3 URL看起来就像任何其他URL一样。就个人而言,我从未需要为S3做与SFTP不同的事情。
最后,我听说使用CloudFront时,如果文件更改,您必须发出无效请求,这会花费金钱。这是因为CloudFront正在从源缓存图像吗?我不习惯这种方式,因为在我的当前设置中,我只需通过FTP替换图像即可更新!没有办法模仿这种经典行为吗?
正确。因为CloudFront将源文件缓存到最近的边缘服务器。默认情况下,过期时间为24小时,但您可以将其设置为1小时,甚至可以通过“作废请求”更快地过期。我见过这个过程需要3-15分钟不等,因为CloudFront必须检查所有边缘服务器以确保它们都被清除。
如果您不想使用缓存,可以直接使用S3。这是最接近通过FTP替换图像的方法,但您会失去使用CDN的所有好处。
根据Amazon CloudFront定价页面
“每月前1,000个文件的作废请求没有额外费用。此后,每个作废请求中列出的文件收取0.005美元。”
每个月作废超过1,000个文件,每个文件只需支付半美分。我经常使用CloudFront,从未超过该限制,但如果您运行一个具有大量更改的大型站点,则肯定是可能的。
我希望这可以帮到你!:)

当然可以。非常感谢。我仍然不清楚的部分是上传整个文件夹 - 像Cyberduck这样的软件是否能让您上传多层目录,并为您将文件“转换”为带有斜杠名称的平面文件? - WackGet
没错。Cyberduck和其他工具会为你处理所有这些事情。 :) - Ryan Parman

0

我测试了一整套客户端应用程序,发现CloudBerry S3 Explorer适用于Windows和CrossFTP适用于Mac比Cyberduck更强大,但我经常使用私人流媒体视频和音频,所以我的要求比在网站上显示图像要高一些。

但是为了回答你的最后一个问题,你可以将带有子文件夹的文件夹拖入存储桶中,层次结构会得到尊重。您可以像使用FTP一样处理存储桶中的文件夹。但是,您必须确保将您的图像设置为公共的,否则您的图像将无法显示。
标准情况下,任何文件都会被上传为私有文件,需要签名URL才能访问它。 但是,通过客户端应用程序,您可以设置存储桶的继承性,使文件自动变为公共的。 您可以在这里找到关于此的大量信息: http://www.miracletutorials.com/category/s3-amazon-cloudfront/

祝好, Rudolf+++


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接