1. 平滑升级
用新的虚拟机server3进行测试。
(1)下载两个不同的nginx版本,一旧一新。对旧版本的nginx进行编译。
[root@server3 ~]# ls
nginx-1.14.2.tar.gz nginx-1.17.8.tar.gz
[root@server3 ~]# tar zxf nginx-1.14.2.tar.gz
[root@server3 ~]# ls
nginx-1.14.2 nginx-1.14.2.tar.gz nginx-1.17.8.tar.gz
[root@server3 ~]# cd nginx-1.14.2
[root@server3 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx
(2)启动旧版本的nginx并查看版本。
[root@server3 nginx-1.14.2]# cd /usr/local/nginx/sbin/
[root@server3 sbin]# ls
nginx
[root@server3 sbin]# ./nginx
[root@server3 sbin]# netstat -antlupe |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 22074 5018/nginx: master
[root@server3 sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.14.2
[root@server3 sbin]#
不要将nginx的二进制启动文件通过 ln -s 链接
必须使用nginx二进制文件的绝对路径
(3)备份老版本的启动脚本
[root@server3 sbin]# cp nginx nginx.old
[root@server3 sbin]# ls
nginx nginx.old
[root@server3 sbin]#
(4)编译新版本
[root@server3 ~]# ls
nginx-1.14.2 nginx-1.14.2.tar.gz nginx-1.17.8 nginx-1.17.8.tar.gz
[root@server3 ~]# cd nginx-1.17.8
[root@server3 nginx-1.17.8]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@server3 nginx-1.17.8]# ./configure --prefix=/usr/local/nginx
直接make 不能make && make install
(5) 复制新版本的启动nginx到老版本的sbin下
cp -f ~/nginx-1.17.8/objs/nginx .
[root@server3 nginx]# cd sbin/
[root@server3 sbin]# ls
nginx nginx.old
[root@server3 sbin]# cp -f ~/nginx-1.17.8/objs/nginx .
cp: overwrite ‘./nginx’? y
[root@server3 sbin]#
(6)关闭旧版本nginx的进程。启动新版本的工作进程。
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
nobody 5019 5018 0 17:29 ? 00:00:00 nginx: worker process
[root@server3 sbin]# kill -USR2 5018
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
nobody 5019 5018 0 17:29 ? 00:00:00 nginx: worker process
root 10152 5018 0 18:46 ? 00:00:00 nginx: master process ./nginx
nobody 10153 10152 0 18:46 ? 00:00:00 nginx: worker process
[root@server3 sbin]#
[root@server3 sbin]# kill -WINCH 5018
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
root 10152 5018 0 18:46 ? 00:00:00 nginx: master process ./nginx
nobody 10153 10152 0 18:46 ? 00:00:00 nginx: worker process
[root@server3 sbin]#
发现,版本已经更新
[root@server3 sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.17.8
[root@server3 sbin]#
2. 版本回退
[root@server3 sbin]# ls
nginx nginx.old
[root@server3 sbin]# cp -f nginx.old nginx
cp: overwrite ‘nginx’? y
[root@server3 sbin]# ls
唤醒原来的旧进程,停掉新版本的工作进程。
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
root 10152 5018 0 18:46 ? 00:00:00 nginx: master process ./nginx
nobody 10153 10152 0 18:46 ? 00:00:00 nginx: worker process
[root@server3 sbin]# kill -HUP 5018
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
root 10152 5018 0 18:46 ? 00:00:00 nginx: master process ./nginx
nobody 10153 10152 0 18:46 ? 00:00:00 nginx: worker process
nobody 10168 5018 0 18:52 ? 00:00:00 nginx: worker process
[root@server3 sbin]# kill -USR2 10152
[root@server3 sbin]# kill -WINCH 10152
[root@server3 sbin]# ps -ef |grep nginx |grep -v grep
root 5018 1 0 17:29 ? 00:00:00 nginx: master process ./nginx
root 10152 5018 0 18:46 ? 00:00:00 nginx: master process ./nginx
nobody 10168 5018 0 18:52 ? 00:00:00 nginx: worker process
[root@server3 sbin]#
可见,版本已经成功回退。
[root@server3 sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.14.2
[root@server3 sbin]#