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

Php 关于使用Amazon CloudFront和/或S3作为映像服务器(与标准Apache服务器相比)的问题,php,apache,amazon-s3,amazon-cloudfront,Php,Apache,Amazon S3,Amazon Cloudfront,目前,我有一个网站,它从Apache服务器提供动态(PHP MySQL)内容,并从单独的Lighthttpd服务器提供静态内容(JavaScript、图像) 出于规模的原因,我想使用AmazonCloudFront,可能还有S3。老实说,我不完全确定S3或CloudFront是如何工作的。我已经习惯了“上传一个文件……它变得可用”的正常服务器行为,S3“bucket”和CloudFrontEdge镜像令人望而生畏 我需要更好地理解这是如何工作的,我有一些问题: 1) 我不想在自己的服务器上存储任

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

出于规模的原因,我想使用AmazonCloudFront,可能还有S3。老实说,我不完全确定S3或CloudFront是如何工作的。我已经习惯了“上传一个文件……它变得可用”的正常服务器行为,S3“bucket”和CloudFrontEdge镜像令人望而生畏

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

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

2) 我们目前通过PHP脚本上传图像,该脚本将图像FTPs到我们的图像服务器,或者通过手动FTP上传。如果我使用S3,会有什么变化?我听说你不能用FTP连接到它(

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

4) 最后,我听说在CloudFront中,如果文件发生更改,您必须发出一个失效请求,这需要花钱。这是因为CloudFront正在缓存来自源的图像吗?我不习惯这样做,因为在我当前的设置中,我只是通过FTP替换了一个图像,它会更新!难道没有办法模仿这种经典行为吗

衷心感谢你的帮助

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

S3是为长期、可靠、持久的数据存储而设计的。水桶(俗称水桶)是特定于区域的,生活在其中一个区域

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

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

2) 我们目前通过PHP脚本上传图像,该脚本将图像FTPs到我们的图像服务器,或者通过手动FTP上传。如果我使用S3,会有什么变化?我听说你不能用FTP连接到它(

S3不是FTP服务器,因此它不使用FTP协议。但是,几乎所有Mac OS X的FTP客户端都支持Amazon S3。Amazon S3有一个web服务API,因此如果您愿意,可以使用AWS SDK之一自动推送

有一个工具可以实现SSH、SFTP、FTP、Amazon S3和其他一些功能。它可用于Mac和Windows。还有其他一些工具提供了一个GUI,可以像通过FTP上传一样上传到S3

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

是和否

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

4) 最后,我听说在CloudFront中,如果文件发生更改,您必须发出一个失效请求,这需要花钱。这是因为CloudFront正在缓存来自源的图像吗?我不习惯这样做,因为在我当前的设置中,我只是通过FTP替换了一个图像,它会更新!难道没有办法模仿这种经典行为吗

对。因为CloudFront将源文件缓存到最近的边缘服务器。默认情况下,过期时间为24小时,但您可以将其设置为1小时,甚至可以通过“失效请求”提前过期。我发现这需要3-15分钟才能完成,因为CloudFront必须检查所有边缘服务器以确保它们都已清除

如果不需要缓存,可以直接使用S3。这与通过FTP替换图像最接近,但这样一来,您首先就失去了使用CDN的所有好处

根据报告:

“对于您每月请求作废的前1000个文件,不收取额外费用。此后,您的作废请求中列出的每个文件的费用为0.005美元。”

一个月内超过1000个文件失效,每一个文件就有0.5便士。我经常使用CloudFront,从来没有超过这个限制,但是如果你正在运行一个有很多很多变化的更大的站点,那么这当然是可能的


我希望这有帮助!:)

我测试了一系列客户端应用程序,发现CloudBerry S3 Explorer for windows和CrossFTP for Mac比Cyberduck功能更强大,但我经常处理私有流视频和音频,因此我的要求比在站点上显示图像要高一些

但要回答上一个问题,您可以将包含子文件夹的文件夹拖到一个bucket中,这样就尊重了层次结构。您可以在bucket中处理文件夹,就像处理FTP一样。但您必须确保将图像设置为公共,否则图像将无法显示。
Sta