1.前言:
Nginx 的正式版 1.0已经发布有一段时间了,甚至在2011年5月26日Nginx 1.0.3也发布了,看看现在服务器上依然运行着nginx/0.7.67,于是决定尝试下Nginx平滑升级的特性。
2.准备工作
2.1获取上次编译配置
因为Nginx的安装全部为编译安装,想要进行平滑升级,必须获取到Nginx上一次进行编译安装时的编辑参数,在shell下执行:
# /usr/local/nginx/sbin/nginx –V
查看上次编译的参数信息:
nginx version: nginx/0.7.67
built by gcc 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
TLS SNI support enabled
configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module
2.2 获取Nginx最新版
此外,我们需要下载Nginx 1.0.3的源代码包并解压缩待用,在shell下执行:
#cd /usr/src/
# wget http://nginx.org/download/nginx-1.0.3.tar.gz
# tar xvzf nginx-1.0.3.tar.gz
2.3备份当前版本的Nginx
俗话说“有备无患”对于这次升级当然也需要备份原来的版本,备份方法很简单,我们只要把旧版的Nginx主程序改下名,这样哪怕升级失败,我们再把原来的文件名改回来就是了。在shell下执行:
#mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
3.开始升级
3.1 编译最新版Nginx
到这里我们就要开始正式的升级过程了,我们首先需要进到放有nginx最新版源代码的目录下,在shell下执行:
#cd /usr/src/nginx-1.0.3
之后我们进行编译前的配置过程,需要使用的参数来自2.1小节。在shell下执行:
#./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module
之后我们使用”make”命令进行编译,请注意,make结束后,不要再执行make install ,否则会覆盖掉现在的配置,就称不上平滑升级了。在shell下执行:
#make
静候编译完成,之后我们进到obj文件夹下,编译完成的文件就放在这下面,我们在shell下执行:
#cd obj
#ls –an
观察是否存在nginx文件,如果存在,就说明我们编译成功,可以通过cp命令将刚刚编译完成的nginx文件拷贝到原版本nginx文件处,但是因为我们现在nginx 在执行中,我们必须先杀掉nginx的进程,之后才能完成替换。所以需要在shell下执行:
#kill `cat /usr/local/nginx/logs/nginx.pid`
#cp nginx /usr/local/nginx/sbin/
#/usr/local/nginx/sbin/nginx
如果最后一步能正常启动nginx,则我们平滑升级步骤就完成了。
4.升级后测试
当然,完成了升级还需要做一些测试,可以测试下以前的页面能否打开,你瞧,现在你能看到这篇日志,说明我已经成功完成了Nginx的平滑升级工作 :)
不错,过来学习一下!
欢迎你来到地球,呵呵。
个人感觉不到平滑 服务中断了啊哥们
我感觉中断的时间还可以接受,而且此处平滑之意在于配置全无需再次配置。不知laird童鞋是否还有更好的直接过渡过来的方法?
@Kaisir: 似乎真的有哦!
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
😡