- 我的一个aws acc上有一个S3水桶
- 我正在使用s3cmd接口将文件上传到bucket
-
我使用s3fs将s3 bucket安装到一个ubuntu ec2实例中,并成功地完成了它,并且能够在我的ec2实例上列出。
s3fs命令-s3fsXXXXXX-ouse_cache=/tmp/s3cache-oalow_other-opasswd_file=/etc/passwd-s3fs-url=http://s3.amazonaws.com-odefault_acl=公共读写/mnt/XXXXXXXXX
-
已在ec2上安装apache2。将文档目录更改为路径装载的s3路径-/mnt/XXXXXXXX。我已经成功地配置了相同的并重新启动了apache2服务。
但是,当我尝试使用apache2访问S3文件时,我会得到"禁止您在此服务器上无权访问/temp/xxxxxTesting.lv"。
有人能帮我解决这个问题吗。这个问题的任何可能原因。我尝试了所有的建议,但都白费了。请有人指导我如何解决这个问题?
您的问号键似乎卡住了。
S3不是块设备,也不是文件系统,使用s3fs或任何其他文件系统模拟器提供文件永远不会给您带来最佳性能。
幸运的是,有一个简单得多的解决方案。
我的图像文件位于/var/content/images中。
如果您从my-web-site.com/images/any/path/here.jpg.jpeg或.gif获取文件,则我的本地apache服务器会检查/var/content/images/any/path/heri.jpg是否实际上是本地硬盘上的文件。如果是,apache将提供本地文件。
如果它不是本地文件,那么apache会使用HTTP从S3桶中获取文件([P]
表示代理),当然,这是S3的本地接口,apache也能非常有效地处理它。
如果文件也不在S3中,apache会返回错误页面,当我们试图从S3 bucket中获取文件时,该错误页面会返回。完成,基本上有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结尾的文件名。
s3fs不是块设备。在你试图访问文件时,它会在你的临时目录下复制文件。它不像NFS那样工作。
您可以使用s3fs将文件复制到s3和从s3复制文件,但不应该直接从s3fs运行应用程序。
我建议您看看新项目RioFS(Userspace S3文件系统):https://github.com/skoobe/riofs.该项目是"s3fs"的替代方案,与"s3fs"相比的主要优点是:简单、操作速度快、代码无错误。目前,该项目处于"测试"状态,但它已经在几个高负载的文件服务器上运行了很长一段时间。
如果您在访问Apache文件时遇到任何问题,请在RioFS GitHub页面上创建票证!
希望它能有所帮助!