我使用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你没有权限访问此服务器上的/temp/xxxxTesting.flv。”
任何人都可以帮我解决这个问题。此问题的任何可能原因。我尝试了所有的建议,但都是徒劳的。请问有人指导我如何解决这个问题?
答案 0 :(得分: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结尾的文件名。
答案 1 :(得分:0)
s3fs不是块设备。当您尝试访问它们时,它会将文件复制到临时目录。它不像NFS那样工作。
您可以使用s3fs从s3复制文件,但不应直接从s3fs运行应用程序。
答案 2 :(得分:0)
我想建议看一下新项目RioFS(Userspace S3文件系统):https://github.com/skoobe/riofs。这个项目是“s3fs”的替代品,与“s3fs”相比的主要优点是:简单,操作速度和无错误的代码。目前该项目处于“测试”状态,但它已经在几个高负载文件服务器上运行了很长一段时间。
如果您在访问Apache文件时遇到任何问题,请在RioFS GitHub页面上创建一张票!
希望它有所帮助!