准备软件包并查看旧版安装配置
[root@nginx ~]# ls
nginx-1.12.0.tar.gz nginx-1.20.1.tar.gz
[root@nginx ~]# nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
安装新版nginx
[root@nginx ~]# tar zxvf nginx-1.20.1.tar.gz -C /usr/local/
[root@nginx ~]# cd /usr/local/nginx-1.20.1/
[root@nginx nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@nginx nginx-1.20.1]# make ##注意 这里只需要编译即可,就不用加 make install了,加了的话会把之前修改的文件覆盖掉,
比如:老版本配置好的 nginx.conf 文件。
备份老的nginx二进制文件
[root@nginx nginx-1.20.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
[root@nginx ~]# cp /usr/local/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/ 复制新版本二进制文件过去
[root@nginx ~]# nginx -t
##可以看到此时nginx版本已经变成最新的了,但是还未结束
因为nginx的进程还是旧的。
nginx主进程支持的信号
使用信号实现热升级
[root@nginx ~]# ps -ef | grep nginx
[root@nginx ~]# kill -USR2 3679 ##向主进程(master)发送USR2信号,nginx会启动一个新版本的主进程和对应工作进程,跟
旧版的进程一起处理请求。
##可以看到此时有四个进程。
[root@nginx ~]# kill -WINCH 3680 ##关闭老版本的worker进程
[root@nginx ~]# kill -QUIT 3679 ##关闭老版本的master进程
[root@nginx ~]# ps -ef | grep nginx