1
  • 我的一个 aws acc 上有一个 S3 存储桶。
  • 我正在使用 s3cmd 接口将文件上传到存储桶。
  • 我使用 s3fs 将 s3 存储桶安装到 ubuntu ec2 实例,我成功地完成了它并能够在我的 ec2 实例上列出它。

    s3fs命令- s3fs XXXXXX-ouse_cache=/tmp/s3cache -oallow_other -opasswd_file=/etc/passwd-s3fs -ourl= http://s3.amazonaws.com -odefault_acl=public-read-write /mnt/XXXXXXXX

  • 在ec2上安装apache2。将文档目录更改为挂载 s3 路径 - /mnt/XXXXXXXX 的路径。我已经成功配置并重新启动了 apache2 服务。

但是,当我尝试使用 apache2 访问 S3 文件时,我得到“禁止您无权访问此服务器上的 /temp/xxxxTesting.flv”。

谁能帮我解决这个问题。此问题的任何可能原因。我尝试了所有的建议,但都是徒劳的。请有人指导我如何解决这个问题?

4

3 回答 3

1

您的问号键似乎卡住了。

S3 不是块设备,也不是文件系统,使用 s3fs 或任何其他文件系统模拟器提供文件永远不会为您提供最佳性能。

幸运的是,有一个更简单的解决方案。

我的图像文件位于 /var/content/images 中。

如果您从 my-web-site.com/images/any/path/here.jpg .jpeg 或 .gif 获取文件,那么我的本地 apache 服务器会检查 /var/content/images/any/path/here。 jpg 实际上是本地硬盘上的一个文件。如果是,则 apache 提供本地文件。

如果它不是本地文件,则 apache[P]使用 HTTP 从 S3 存储桶中获取文件(用于代理),这当然是 S3 的本机接口,并且 apache 也可以非常有效地处理。

如果文件也不在 S3 中,当我们尝试从那里获取文件时,apache 返回 S3 存储桶返回的错误页面。完成,基本上只需要 3 行配置:

RewriteEngine on
RewriteCond /var/content%{REQUEST_FILENAME} !-f
RewriteRule ^/images/(.*[gif|jpe?g])$ http://my-bucket-name.s3-website-us-east-1.amazonaws.com/images/$1 [P]

对我来说,这种方法似乎比尝试使用 s3fs 破解相同的功能要简单得多。

请注意,在我的某些系统上,我需要在 %{REQUEST_FILENAME} 之前添加物理路径,而有些则不需要。我没有详细研究为什么会这样,但请注意不同的环境可能需要不同的设置。您还需要提供适当的模块,并且示例中的正则表达式仅适用于以 gif jpeg 和 jpg 结尾的文件名。

于 2013-07-30T03:17:07.033 回答
0

我想推荐看看新项目 RioFS(用户空间 S3 文件系统):https ://github.com/skoobe/riofs 。该项目是“s3fs”替代方案,与“s3fs”相比的主要优势是:简单、操作速度和无错误代码。目前该项目处于“测试”状态,但它已经在几个高负载文件服务器上运行了相当长的一段时间。

如果您在访问 Apache 文件时遇到任何问题,请在RioFS GitHub 页面上创建票证!

希望能帮助到你 !

于 2013-07-29T16:36:37.380 回答
0

s3fs 不是块设备。当您尝试访问它们时,它会在幕后将文件复制到您的临时目录。它不像 NFS 那样工作。

您可以使用 s3fs 将文件复制到 s3 或从 s3 复制文件,但您不应该直接从 s3fs 运行您的应用程序。

于 2013-07-29T15:38:15.020 回答