当前位置: > Linux服务器 > nginx >

nginx无痛升级并增加nginx-gridfs模块支持

时间:2016-06-06 13:25来源:linux.it.net.cn 作者:IT

在不影响

Ubuntu系统版本:

 

  1. cat /etc/issue  
  2. buntu 12.10 \n \l  
cpu:x86_64

 

nginx版本:原先使用apt-get安装的,已卸载,版本貌似是1.1左右

即将安装nginx版本1.4.4

升级步骤:

1.首先准备好将要使用的工程,下载nginx相应版本源码

2.解压,进入主目录 vi nginx-1.4.4/objs/Makefile修改一个小错误,把第3行的-Werror错误去掉,不然会报一个unused错误。

3.查看现有版本的配置信息nginx -V,并记录下来,比如我的是:

 

  1. sudo ./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-auth-pam --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-dav-ext-module    

这就是原先编译的配置参数信息了,但是升级的时候不能直接拿来用,因为后面的--add-module路径参数都不对,而且不同版本间的模块叫法等也许不一样了。

 

推荐一个网址 http://wiki.nginx.org/ModulesChs#.E6.A0.87.E5.87.86_HTTP_.E6.A8.A1.E5.9D.97

标准模块很多都是必须安装的,如果不想安装使用--without开头的配置。

还有一些可选的模块,看个人的需要添加了,还有邮件模块,另外还有第三方模块,比如nginx-gridfs就属于第三方的模块。
 

4.这步骤添加nginx-gridfs,如果不需要可以跳过此步骤。首先从github上下载nginx-gridfs工程,然后按照步骤git submodule init, git submodule update.


5.鉴于nginx已经把很多的模块作为标准模块了,因此,有些模块已经被默认安装了,我们配置的时候直接使用原先的配置即可。如果不加nginx-gridfs模块,去掉其参数即可。

 

  1. sudo ./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module  --add-module=/opt/nginx-gridfs/  

配置过程中有可能会出现如下一些错误:
  1. 错误提示“  
  2. ./configure: error: the HTTP XSLT module requires the libxml2/libxslt  
  3. libraries. You can either do not enable the module or install the libraries.  
  4. ”  
  5. apt-get install libxml2  
  6. apt-get install libxslt1-dev  
  7.   
  8. 错误提示“  
  9. ./configure: error: the HTTP image filter module requires the GD library.  
  10. You can either do not enable the module or install the libraries.  
  11. ”  
  12. apt-get install libgd2-xpm libgd2-xpm-dev  
  13.   
  14. 错误提示“  
  15. ./configure: error: the GeoIP module requires the GeoIP library.  
  16. You can either do not enable the module or install the library.  
  17. ”  
  18. apt-get install libgeoip-dev  
错误提示:”
 
  1. checking for PCRE library in /usr/include/pcre/ ... not found  
 
  1. “  
  2. apt-get install libpcre3-dev libssl-dev  

 

 

6.make

 

7.sudo apt-get remove nginx 把原先的nginx相关模块卸载掉。或者which nginx,然后找到位置备份之。

8.sudo make install

9. sudo make upgrade 更新

nginx -v查看当前的版本号是否是1.4.4, which nginx查看当前nginx的链接位置

nginx -V 查看参数配置是否正确

sudo ln -s /et/nginx/sbin/nginx  /usr/sbin/ 

 

-----------------------------------------------------------------------------------------------

昨晚太晚了,没搞完,今天接着弄!

现在接着配置nginx-grifs,实现nginx-gridfs功能

10. sudo /etc/nginx/nginx.conf 打开配置,添加如下配置:

  1.  location /img/ {  
  2.      #gridfs  数据库名       
  3.      gridfs   img  field=filename  type=string;   
  4.        
  5.      mongo 127.0.0.1:27017;  #local  
  6. }  

 

 

gridfs:nginx识别插件的关键字

pics: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 url

参考于网络 http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/05/2038285.html

如果出现:

Starting nginx: nginx: [emerg] "location" directive is not allowed here in /etc/nginx/nginx.conf:10
nginx: configuration file /etc/nginx/nginx.conf test failed

的错误,那有可能是你配置错了,location位于http{}中并且在某server{}中
 

11.上传文件验证:

sudo  mongofiles put --host localhost --port 27017 --db img --local ~/photo.jpg --type jpg

如果提示Error: need a filename错误,就在--local ~/photo.jpg   xxxname.jpg 添加一个名字即可 (http://hi.baidu.com/manbuzhiwu/item/9adbce5d45405811e6c4a59c)

然后浏览器访问 IP/img/xxxname.jpg

如果正确就可以看到图片了。

 

项目中使用nginx-gridfs,是为了直接访问静态文件,以提高访问效率。使用mongodb存储图片毕竟不是长久之计,随着项目的发展也有可能需要单独做一个图片服务器,甚至集群,不管怎样,不断的升级,不断的重构,不断的优化将伴随着项目的整个过程。不用想的太远,但是也要去预测短期的项目未来,及时做好准备,这样才能走好脚下的路。

 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容