1)我不想在我自己的服务器上存储任何图像。我希望他们完全在云端。我是否正确,这意味着我需要使用 S3 作为“源服务器”进行存储?CloudFront 本身还不够吗?CloudFront 只是边缘 CDN 服务吗?
S3 专为长期、可靠的数据存储而设计,具有11 个 9的持久性。存储桶(它们被称为)是特定于区域的,并且位于亚马逊的区域数据中心之一。
相反,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。还有其他工具可以提供用于上传到 S3 的 GUI,就像您通过 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 定价页面:
“您每月请求失效的前 1,000 个文件不收取额外费用。此后在您的失效请求中列出的每个文件 0.005 美元。”
对于您在一个月内使 1,000 多个文件无效的每个文件,这就是半分钱。我经常使用 CloudFront 并且从未超过这个限制,但如果您正在运行一个具有大量更改的大型站点,那么这当然是可能的。
我希望这有帮助!:)