【问题标题】:AWS S3 utilizing for website static imagesAWS S3 用于网站静态图像
【发布时间】:2015-08-08 21:29:03
【问题描述】:

我们目前正在利用 OpsWorks 将我们的网站迁移到 EC2。现在我们在编码中使用相对 URL 引用站点的所有媒体文件......“/images/image1.jpg”等等。有没有办法在我们的编码中为 /images 目录设置别名以利用 S3 存储桶?我们想做的是将大尺寸的图像输出到 S3 上,这样它就不会存储在我们的每个 S3 实例中。

我知道我们可以为存储桶本身创建一个别名 DNS 条目,但是我们必须在我们的编码中引用该完整 URL。例如,http://images.s3-website-us-east-1.amazonaws.com。我们宁愿在编码中保留 URL 引用的相对路径和绝对路径。

我们将 AWS Linux 用于 PHP/Apache 前端 EC2 实例。

【问题讨论】:

  • 您可以编写自己的处理程序以在应用程序级别使用 S3 CLI 并将所有请求路由到 S3 存储桶,您可以使用 Cloudfront(AWS CDN)前端 S3 存储桶,并指向DNS 条目,然后使用images.yoursite.com/images/ 作为它的别名,或者您可以使用s3fuse 之类的东西(我自己从来没有发现它那么好)在您的 EC2 实例上创建一个到 S3 的挂载

标签: php amazon-web-services amazon-ec2 amazon-s3


【解决方案1】:

如果您使用的是 Apache,那么您可以使用 Apache 的内置代理支持代理所有 /images URL。您可能想在 Apache 配置中添加类似的内容:

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /images/ http://images.s3-website-us-east-1.amazonaws.com/

这实际上创建了一个反向代理。当 Apache 服务器看到与 /images/ 匹配的请求时,它将到达 S3 URL 以获取对象并将其返回给客户端。

【讨论】:

  • OP 可能没有意识到这一点 - 它通过您的服务器发送所有流量,因此您在服务器上有更多数据(和更多点击)。但如果您不想引用子域,这是唯一的方法。
  • 我们的想法实际上是为更大的图像文件提供一个点,而不是将它们本地存储在每个 EC2 实例的 /images 目录中。利用 OpsWorks,我们可以在负载等待时准备好几个实例,并且必须部署 ~1GB 的压缩文件以获取代码。如果我们可以将这些图像提取到 S3 存储桶中,那么用于部署的 zip 文件大约为 200MB,而且部署速度更快。
  • 除非我遗漏了什么,否则我建议将 /images/ 请求(或其他 URL 路径)代理到 S3 的建议在这种情况下会非常有效。这些图像将驻留在 S3 上,您可以在您的站点中将它们称为“/images/big_image.jpg”,并且代理声明将导致从 S3 获取图像。正如 tedder42 指出的那样,这种方法会导致所有流量都流经 OpsWorks 实例,但鉴于您的描述,这听起来没什么大不了的。
  • 正确。我打算走这条路并测试一下。
  • Apache ProxyPass 按计划工作。我回到这个问题,因为现在我需要通过 OpsWorks 的厨师食谱自动将该 apache 代理配置放入 apache 配置中。有没有人做过模板或配置来“调整”网站的 apache 配置?
【解决方案2】:

您可以设置 apache 以将重定向返回到存储在 S3 中的图像的 URL。

【讨论】:

  • 你能详细说明一下吗?
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2021-07-16
  • 2013-12-12
  • 2021-01-08
相关资源
最近更新 更多