前言:服务器上的Nginx原来版本是0.5.37,但在使用过程中发现rewrite时Nginx总会将url中的’+'字符转成编码’%2b’,造成我程序的一些问题。听说0.6版本已经解决了这个问题,并且虽然0.7版本已经出到0.7.22了,但官方还是开发版,所以就升级到0.6的最新版本0.6.33,问题果然解决。升级过程本来想用make update的方式,但考虑到是大版本的升级(0.5->0.6),为了避免不必要的麻烦,就用重新编译安装、并覆盖原来配置文件的方式升级了。虽然过程比较简单,但还是有一些地方是需要注意的,特记下来备忘。
1、下载0.6.33版本
1 | $wget http://sysoev.ru/nginx/nginx-0.6.33.tar.gz |
2、停止原来Nginx服务器:
1 2 3 | #ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}' 2816 #kill -QUIT 2816 |
3、备份原来安装文件
1 | #mv /usr/local/nginx/ /usr/local/nginx-0.5.37/ |
4、重新安装nginx
1 2 3 4 5 | $tar zxvf nginx-0.6.33.tar.gz $cd nginx-0.6.33 $./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module $make #make install |
5、Copy原来的nginx.conf, fcgi.conf文件和vhost/目录到新版本的对应目录(注:我是将虚拟机server的配置放在vhost目录下,然后在nginx.conf中include进来,如果你的虚拟机配置如参考文档1和2那样都放在nginx.conf里面,则没有相应的vhost目录)
1 2 3 4 5 | #cd /usr/local/nginx/conf/ #mv nginx.conf nginx.conf.sample #cp ../../nginx-0.5.37/conf/nginx.conf . #cp ../../nginx-0.5.37/conf/fcgi.conf . #cp -rf ../../nginx-0.5.37/conf/vhosts/ . |
注意,相比较0.5版本,0.6版本的配置文件根已经由原来的安装根目录(/usr/local/nginx/)转移到conf/目录(/usr/local/nginx/conf/)下,所以nginx.conf配置文件的相应路径要修改:
include conf/mime.types; => include mime.types;
include conf/fcgi.conf; => include fcgi.conf;
6、启动Nginx
1 | #/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf |
参考文档:
1、http://blog.s135.com/post/314.htm
2、http://blog.s135.com/post/351.htm
网上有个方法可以在不间断服务器的情况下升级Nginx版本:
http://bbs.chinaunix.net/viewthread.php?tid=1283047