mongodb gridfs nginx 文件服务器安装配置

 

gridfs是一种将大型文件存储在MongoDB的文件规范。所有官方支持的驱动均实现了GridFS规范。简单看一下官方说明:
When to Use GridFS
In MongoDB, use GridFS for storing files larger than 16 MB.
In some situations, storing large files may be more efficient in a MongoDB database than on a system-level filesystem.
玩了玩gridfs才发现,这玩意,不能算做是传统意义上的分步式文件服务器。它的数据存储在mongodb中,大文件会被分成小块存储,分布式依赖mongodb。

对于存储小文件,例如:图片之类的,fastdfs比较合适的。
对于大一些的文件,例如:小视频,大一点文档等gridfs还是比较合适的。
一,安装mongodb,gridfs,php扩展

[root@localhost ~]# yum install php-pecl-mongo mongodb mongodb-devel mongodb-server 
二,启动mongodb,重启php-fpm

[root@localhost ~]# /etc/init.d/mongod start 
[root@localhost ~]# /etc/init.d/php-fpm restart 

三,常用命令行下操作

[root@localhost ~]# mongofiles list      //上传列表 
connected to: 127.0.0.1 
1.txt   342 
1.txt   342 
/root/1.txt     342 
/root/1.txt     342 
/root/1.txt     342 
111.jpg 74843 
111.jpg 74843 
111.jpg 74843 
 
[root@localhost ~]# mongofiles search txt    //查找含有txt的文件 
connected to: 127.0.0.1 
/root/1.txt     342 
/root/1.txt     342 
/root/1.txt     342 
1.txt   342 
1.txt   342 
 
[root@localhost ~]# mongofiles list 111    //查找以111开头的文件 
connected to: 127.0.0.1 
111.jpg 74843 
111.jpg 74843 
111.jpg 74843 
 
[root@localhost ~]# mongofiles put 111.jpg    //上传 
connected to: 127.0.0.1 
added file: { _id: ObjectId('57a05aac1936d393ecd3e20e'), filename: "111.jpg", chunkSize: 261120, uploadDate: new Date(1470126764728), md5: "67131c5063a3397efe2c2d552f7f4528", length: 74843 } 
done! 
 
[root@localhost ~]# mongofiles get 111.jpg   //下载 
connected to: 127.0.0.1 
done write to: 111.jpg 

四,php实例

1,上传

<?php 
 
$mongo = new Mongo(); 
$db = $mongo->selectDB('test'); 
$grid = $db->getGridFS(); 
$id = $grid->storeFile("111.jpg");   //注意文件路径 
echo $id; 

2,下载

<?php 
 
$mongo = new Mongo(); 
$db = $mongo->selectDB('test'); 
$grid = $db->getGridFS(); 
$file = $grid->findOne(array('filename'=>'111.jpg')); 
 
header('Content-type: image/png'); 
echo $file->getBytes(); 
exit; 

3,单个查找

<?php 
 
$mongo = new Mongo(); 
$db = $mongo->selectDB('test'); 
$grid = $db->getGridFS(); 
$id = '579f183a33a447cd1d8b4568'; 
//$file = $grid->findOne(array('_id'=>new MongoId($id)));   //三个结果一样 
$file = $grid->findOne(array('filename'=>'1.txt'));    //三个结果一样 
//$file = $grid->findOne('1.txt');    //三个结果一样 
print_r($file); 

4,多个查找

<?php 
 
$mongo = new Mongo(); 
$db = $mongo->selectDB('test'); 
$grid = $db->getGridFS(); 
$cursor = $grid->find(array('filename'=>'/root/1.txt')); 
foreach ($cursor as $obj) { 
 $filename = $obj->getFilename().'<br/>'; 
 echo $filename; 

五,nginx-gridfs插件安装

上面我说了,gridfs并不是传统意义上的分布式文件服务器,上传的文件,具体你也找不到在什么地方。不管nginx和apache设置虚拟机的时候,都是要指定root路径的。现在呢,没路径,要使nginx能访问图片,要装nginx-gridfs插件了。
1,nginx 1.4.7下载

# wget http://nginx.org/download/nginx-1.4.7.tar.gz 
2,nginx1.4.7 安装方法

# git clone git://github.com/mdirolf/nginx-gridfs.git 
# cd nginx-gridfs 
# git clone https://github.com/eagleas/mongo-c-driver.git 
# mkdir /usr/local/nginx 
# tar zxvf nginx-1.4.7.tar.gz 
# cd nginx-1.4.7 
# ./configure --prefix=/usr/local/nginx --add-module=/root/nginx-gridfs 
# vim objs/Makefile     //删除-Werror,不然make && make install的时候会报错 
# make && make install 

3,配置nginx1.4.7

location /images/{ 
 gridfs test field=filename type=string; 
 mongo 127.0.0.1:27017; 

gridfs:nginx识别插件的关键字
test:db名
[root_collection]: 选择collection,如root_collection=blog, mongod就会去找blog.files与blog.chunks两个块,默认是fs
[field]: 查询字段,保证mongdb里有这个字段名,支持_id, filename, 可省略, 默认是_id
[type]: 解释field的数据类型,支持objectid, int, string, 可省略, 默认是int
[user]: 用户名, 可省略
[pass]: 密码, 可省略
mongo: ip:port

重启nginx后,就可以能过url进行访问了。yun_qi_img/111.jpg

4,安装nginx1.4.7,及gridfs插件遇到的问题

4.1,安装报错

cc1: warnings being treated as errors
/root/nginx-gridfs/mongo-c-driver/src/bson.c: 在函数‘bson_ensure_space’中:
/root/nginx-gridfs/mongo-c-driver/src/bson.c:632: 错误:在有符号和无符号整数表达式间比较
make[1]: *** [objs/addon/src/bson.o] 错误 1
make[1]: Leaving directory `/root/nginx-1.4.7'
make: *** [build] 错误 2

解决办法:

vim objs/Makefile ,删除-Werror
4.2,nginx1.4.7无法显示文件,nginx error log报错
Mongo connection dropped, could not reconnect

解决办法:

mongo-c-driver直接git clone下载,git clone https://github.com/eagleas/mongo-c-driver.git
而不要进行以下二步操作

git submodule init
git submodule update

5,nginx1.2.9,及gridfs插件遇到的问题
nginx1.2.9安装根nginx1.4.7安装有二点不同就是

# git clone https://github.com/eagleas/mongo-c-driver.git 
替换成 
# git submodule init 
# git submodule update 
还有就是不用编辑objs/Makefile文件,安装过程以及nginx的log不会报错。推荐大家使用nginx1.2.9

时间: 2024-10-22 13:41:05

mongodb gridfs nginx 文件服务器安装配置的相关文章

闲谈MongoDb+GridFS+Nginx

原文:http://tech.techweb.com.cn/thread-433779-1-1.htmlhttp://nightsailer.com/2009/11/13/499.html MongoDb果然是个好东西. 我在最近的一个项目实践中, 实验性的用到了这个东西.在测试中,对于GridFS相当满意. 首先, 和传统的MogileFS不同, gridfs可以和其它的meta数据部署在同一个db中,默认的会为gridfs的collection分别创建fs.files和fs.chunks.5

MONGODB GRIDFS存取文件PHP示例

最近项目需要用到MongoDB存取文件,这里有个简单的PHP示例: public function run(){  //初始化gridfs  $m = new MongoClient(); // 连接  $db = $m->selectDB("excel");  //dump($m);exit;  //$collection = $db->testexcel;  $grid = $db->getGridFS(); //取得gridfs对象    //gridfs有三种

Ubuntu中Nginx服务器安装配置教程

  Nginx是一个非常轻量级的HTTP服务器,也是一个高性能的HTTP和反向代理服务器,同时还是一个IMAP/POP3/SMTP 代理服务器. 1.对PHP支持 目前各种web 服务器对PHP的支持一共有三种: (1)通过web 服务器内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持. (2)通过CGI来实现,这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将

使用mongodb的gridfs当做文件存储系统如何?

问题描述 使用mongodb的gridfs当做文件存储系统如何? 项目中,对于文件的存放想找一个解决方案,文件有大有小,小的可能2K,大的可能10G以内. 目的想实现文件在多台服务器之间的备份,避免单台服务器物理损毁造成文件丢失 第一种方案:直接存放在linux的文件系统中,自行分目录存放.可是要自己实现备份,有点重新造轮子的感觉 第二种方案:就是标题提出的方案,使用mongodb的gridfs做文件保存,可以实现自动文件复制 第三种方案:使用fastdfs做文件保存,也可以实现自动文件复制 我

linux-Linux搭建Fastdfs文件服务器安装nginx问题

问题描述 Linux搭建Fastdfs文件服务器安装nginx问题 /home/jumper/fastdfs-nginx-module/src//ngx_http_fastdfs_module.c In file included from /home/jumper/fastdfs-nginx-module/src//ngx_http_fastdfs_module.c:6:0: /home/jumper/fastdfs-nginx-module/src//common.c:43:2: error

PHP MongoDB GridFS 存储文件的方法详解_MongoDB

<?php //初始化gridfs $conn = new Mongo(); //连接MongoDB $db = $conn->photos; //选择数据库 $grid = $db->getGridFS(); //取得gridfs对象 gridfs有三种方式存储文件 第一种直接存储文件 $id = $grid->storeFile("./logo.png"); 第二种存储文件二进制流 $data = http://www.bkjia.com/PHPjc/get

Nginx中如何配置虚拟主机

虚拟主机:将一台服务器虚拟出多台主机,每台虚拟主机都可以是一个独立的网站,都可以具有独立的域名,具有完整的Intemet服务器功能.同一台主机上的虚拟主机之间是完全独立的. 简单说就是你有两个完全独立的网站,可以利用虚拟主机在一台服务器上跑. 跟Apache -样,Nginx也可以配置多种类型的虚拟圭机:一是基于IP的虚拟主机,二是基于域名的虚拟主机,三是基于端口的虚拟主机. nginx.conf http { --- #server就是定义主机的 #server { # listen 8000

nginx文件类型错误解析漏洞

今天早上看到QQ群里有人发了个消息说nginx 服务器与PHP组合有0day漏洞! 正准备部署这个软件,漏洞就来了 具体的方式转载一下吧! 第一次转载文章 链接地址   :http://www.80sec.com/nginx-securit.html nginx文件类型错误解析漏洞 Write by admin in 未分类 at 2010-05-20 18:24:55 漏 洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行.80

http响应Last-Modified和ETag以及Apache和Nginx中的配置

 基础知识 1) 什么是"Last-Modified"? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样: Last-Modified: Fri, 12 May 2006 18:53:33 GMT 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过: If-