【问题标题】:mounted s3 bucket files not accessible through apache无法通过 apache 访问已挂载的 s3 存储桶文件
【发布时间】:2013-07-29 15:31:52
【问题描述】:
  • 我的一个 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 文件时,我收到“Forbidden You don't have permission to access to /temp/xxxxTesting.flv on this server.”

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

【问题讨论】:

  • 我正在使用最新版本的 s3fs - 1.71

标签: ubuntu amazon-web-services amazon-ec2 s3fs


【解决方案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 使用 HTTP 从 S3 存储桶中获取文件([P] 用于代理),这当然是 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 结尾的文件名。

【讨论】:

  • 它是一个媒体文件,每个文件大小约为 700-800MB。我想要有 URL 身份验证机制。此解决方案是否适合此类要求。
  • 您可以使用签名的 url 直接从 s3/cloudfront 提供私有文件​​。
  • cloudfront 是我已经尝试过的。但是,我的应用程序失去了对从云端提供的文件的控制。我想控制我的应用做出的决定的服务。
【解决方案2】:

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

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

【讨论】:

  • 关于如何完成使用 apache2 提供 s3 文件的任务的任何建议。这将非常有帮助
【解决方案3】:

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

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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2017-02-16
    • 2021-08-21
    • 2020-06-15
    • 2019-01-25
    相关资源
    最近更新 更多