1

我用 Nginx 设置了一个 Web 服务器,我使用 nginx-gridfs 模块来访问 Mongodb 内容并使用 http_mp4_module 在客户端上将 mp3 文件作为流播放,以上两个服务都可以独立工作,但是当我尝试结合这两个服务时,并尝试访问存储在Mongodb中的mp3文件并在客户端将其作为流播放,出现404错误,这听起来http_mp4_module无法与Gridfs一起使用,它需要文件系统中存在的真实文件。以下是我的 Nginx 配置设置:

访问 Mongodb 内容:(我可以通过 URL http://myhost/voice/mp3/xxxxxx.mp3 访问 mp3 文件)

     location /voice/mp3/ {
                     gridfs whatsup
                            field=filename
                            type=string
                            root_collection=storage.voice.mp3;
                     mongo localhost:27017;
     }

用于在客户端以流的形式播放 mp3 文件(我可以使用 URL http://myhost/mp3/xxxxxx.mp3 的浏览器播放 mp3,该 mp3 文件存在于文件系统中)

     location /mp3 {
              root /var/www/html/;
              mp4;
     }

上述两个服务都工作正常,但是当我将它们结合起来时,它不起作用,配置如下:

     location /play/mp3 {
                     gridfs whatsup
                            field=filename
                            type=string
                            root_collection=storage.voice.mp3;
                     mongo localhost:27017;

                     mp4;
        }

当我尝试使用浏览器访问 URL http://myhost/play/mp3/xxxxxx.mp3 并使用它时,它显示 404 错误。

有没有办法将这两种服务结合起来?或者是否有我错过的东西?

4

3 回答 3

2

不要使用 gridfs-fuse 将您的 gridfs 挂载到文件系统,请检查以下内容:http: //blog.vladimirm.com/2011/06/export-files-from-mongodb-gridfs-with-directory-paths/

这是一个将 gridfs 文件挂载到文件系统的 bash 脚本

用法 :

  • 创建名为 gridfs.sh 的文件(放入您将在链接中找到的 bash 脚本中)。

  • 运行这个命令: $ ./gridfs.sh host database_name(这将在你所在的目录中挂载文件)。

于 2012-12-10T11:03:14.427 回答
1

由于时间搜索,一些媒体播放器需要 HTTP 范围请求协议。此类播放器在播放媒体之前检查网络服务器是否支持该协议。

原来的 nginx-gridfs 模块没有范围请求的实现。这个快速破解补丁添加了范围请求支持,我确认它解决了问题。

然而,这个实现会阻塞整个 nginx 进程,直到一个流完成。这对nginx来说太糟糕了,因为在事件驱动的架构中应该避免阻塞IO。所以,我认为我们应该使用其他实现来提供大文件或流媒体,例如 gidfs-fuse 和其他节点代理

于 2013-11-11T01:44:36.797 回答
0

首先,将您的 mongodb gridfs url 重定向到本地文件系统,像这样配置您的 nginx 服务器:

location / {
        root mp3;
        mp4;
}

location /tushuo/voice/mp3/ {
    rewrite ^/tushuo/voice/mp3/(.*) /$1;
}

然后,您可以使用gridfs-fuse将您的 mongodb gridfs 挂载到本地文件系统树,以便 nginx mp4 模块可以找到它。(注意:您必须以 root 身份运行 nginx。)

sudo ./mount_gridfs --db=whatsup.storage.tushuo.voice --host=localhost --fsnode=mp3 -/usr/local/nginx/mp3/
于 2012-09-17T03:32:36.550 回答