mongodb分片集群和GridFS已经搭建完成,利用nginx的GridFS模块,实现nginx直接连接到mongodb数据库读取文件、图片。

一、本次安装只是nginx和nginx模块GridFS的安装配置。
1、安装 nginx 需要的依赖
`yum install -y zlib zlib-devel gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel```
注意:编译nginx过程中,如在出现问题,自行安装依赖。
2、下载nginx

wget -c https://nginx.org/download/nginx-1.12.1.tar.gz
tar -zxvf nginx-1.12.1.tar.gz -C /usr/local/nginx

3、下载nginx-gridfs,nginx通过该模块和mongodb的gridfs进行整合

wget -c https://github.com/mdirolf/nginx-gridfs/archive/v0.8.tar.gz -O nginx-gridfs-0.8.tar.gz
tar -xzvf ./nginx-gridfs-0.8.tar.gz

4、下载nginx的mongodb驱动,nginx-gridfs-0.8目录下的mongo-c-driver下。

wget https://github.com/mongodb/mongo-c-driver/archive/v0.3.1.tar.gz
tar -zxvf v0.3.1.tar.gz
cd  /root/mongo-c-driver-0.3.1
#将驱动下的所有移动到nginx-gridfs目录下的mongo-c-driver目录下。
mv ./* /root/nginx-gridfs-0.8/mongo-c-driver/
[root@hadoop-namenode mongo-c-driver]# ll
total 36
-rw-rw-r-- 1 root root 11358 May 13  2011 APACHE-2.0.txt
drwxrwxr-x 2 root root    40 May 13  2011 buildscripts
drwxrwxr-x 2 root root    41 May 13  2011 docs
-rw-rw-r-- 1 root root 10760 May 13  2011 doxygenConfig
-rw-rw-r-- 1 root root   363 May 13  2011 HISTORY.md
-rw-rw-r-- 1 root root  3024 May 13  2011 README.md
-rw-rw-r-- 1 root root  4090 May 13  2011 SConstruct
drwxrwxr-x 2 root root   185 May 13  2011 src
drwxrwxr-x 2 root root   282 May 13  2011 test

5、编译安装nginx,编译过程中将nginx-gridfs添加进去。
5.1、编译参数
`./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_v2_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --add-module=/root/nginx-gridfs-0.8/``

注意:--add-module=/root/nginx-gridfs-0.8。这个目录就是nginx-gridfs模块的位置。
5.2、编译步骤
#进入到nginx包目录下
cd nginx-1.12.0
#开始编译
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_v2_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --add-module=/root/nginx-gridfs-0.8/
make && make install
5.3、问题处理
1、在make && make install的时候报错:
ngx_http_gridfs_module.c:684:16: 错误:变量‘chunksize’被设定但未被使用
处理方法:进入nginx包目录 vi nginx-1.12.0/objs/Makefile修改一个小错误,把第3行的-Werror错误去掉。
2、not exist /root/nginx-gridfs-0.8/mongo-c-driver/src/*.h,表示nginx的mongodb驱动没有安装。
处理方法:安装驱动,下载nginx的mongodb驱动,上面第四步操作。
至此nginx和nginx-gridfs模块安装成功,下面是配置文件的修改。
6、配置nginx-gridfs文件
进入安装好的nginx配置文件conf目录下

  server{
        listen       80;
        server_name  192.168.60.235;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        location /pics/ {
        gridfs  test
        field=_id
        type=objectid;
         mongo  192.168.xx.2x7:27017;
       }
     }

参数详解:
gridfs:nginx识别插件的关键字
edusns: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: mongodb 路由地址(集群中)
7、上传文件到mongodb,然后进行浏览器测试。
7.1、命令行mongodb上传文件
mongofiles put 1234.jpg --local ~/1234.jpg --host 172.0.0.1 --port 27017 --db testdb --type jpg
7.2、浏览器访问
ip/pics/1234.jpg

总结:这篇博文,操作过程,如有问题,提出来大家一起解决。入门新手一枚,请大家多多指正。

开源是一种精神,分享是一种美德。