【问题标题】:Questions about using Amazon CloudFront and/or S3 as an image server (vs standard Apache server)关于使用 Amazon CloudFront 和/或 S3 作为图像服务器(与标准 Apache 服务器相比)的问题
【发布时间】:2012-09-26 01:35:58
【问题描述】:

目前,我有一个网站,它从 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 替换图像并更新!有没有办法模仿这种经典的行为?

衷心感谢您的帮助。

【问题讨论】:

    标签: php apache amazon-s3 amazon-cloudfront


    【解决方案1】:

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

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

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

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

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

    S3 不是 FTP 服务器,因此它不使用 (S)FTP 协议。但是,几乎所有 Mac OS X 的 FTP 客户端都支持 Amazon S3。 Amazon S3 有一个 Web 服务 API,因此您可以根据需要使用 AWS 开发工具包之一自动执行推送。

    一个工具,Cyberduck,可以做 SSH、SFTP、FTP、Amazon S3 和其他一些事情。它适用于 Mac 和 Windows。还有其他工具提供了一个 GUI,用于上传到 S3,就像您通过 FTP 上传一样简单。

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

    是和不是。

    是的,S3 是一个平面文件系统,但文件的名称中可以包含斜杠。例如,“abc/def/ghi/jkl.txt”实际上不是三个文件夹和一个文件,而是一个文件名中带有斜线的文件。大多数 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,并且从未超过这个限制,但如果您正在运行一个具有大量更改的大型站点,那么这当然是可能的。

    我希望这会有所帮助! :)

    【讨论】:

    • 确实如此。非常感谢。我仍然不清楚的唯一部分是上传整个文件夹 - 像 Cyber​​duck 这样的软件是否可以让您上传多层目录并将文件“转换”为名称中带有斜杠的平面文件?
    • 是的。 Cyber​​duck 和其他工具为您处理所有这些事情。 :)
    【解决方案2】:

    我测试了一系列客户端应用程序,发现 Windows 的 CloudBerry S3 Explorer 和 Mac 的 CrossFTP 比 Cyber​​duck 更强大,但我经常处理私人流式视频和音频,所以我的要求比显示图像要高一些一个网站。

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

    干杯, 鲁道夫+++

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 1970-01-01
      • 2023-03-08
      • 2011-03-05
      • 2016-11-10
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2012-03-22
      相关资源
      最近更新 更多