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,并且从未超过这个限制,但如果您正在运行一个具有大量更改的大型站点,那么这当然是可能的。
我希望这会有所帮助! :)