热升级流程
1将旧nginx文件换成新nginx文件(注意备份)
2向master进程发送USR2信号
3master进程修改pid文件名,加后缀.oldbin
4master进程用新nginx文件启动新master进程
5向老master进程发送WINCH信号,关闭老worker
6回滚:向老master发送HUP,向新master发送QUIT
备份二级制文件 因为升级只是升级2进制文件 并不会更换其他文件。
解压nginx-1.14.2.tar.gz
tar zxf nginx-1.14.2.tar.gz
cd nginx-1.14.2
vim auto/cc/gcc
#CFLAGS="$CFLAGS -g" ##注释掉(关闭debug日志)
./configure --prefix=/usr/local/nginx/
make
注意:不要make install,会导致原先的主程失控
cp -f nginx /usr/local/nginx/sbin/nginx
添加-f否则会提示cp: cannot create regular file ‘/usr/local/nginx/sbin/nginx’: Text file busy
给正在运行的nginx的master进程发送信号 需要进行热升级
新起的worker正在逐步取代旧的worker
给正在运行的nginx的老master进程发送信号需要优雅的退出
老的master进程还在但是没有worker进程了,用于出现问题时回滚老版本,并不会自动退出。
如果需要测试此时nginx的版本号 最好还是访问一个404不存在的文件 查看nginx返回的版本号。要开启server_tokens on 这个参数,默认是关闭的。生产建议关闭。
回滚老版本
先将旧的二进制文件替换回去 下面测试是将1.14替换成1.8,然后回滚到1.14的例子
如图已经从1.14”升级”为1.8
下面进行回滚
正确示范
kill –HUP $odlpid
旧的版本的nginx 已经拉起了worker进程。
关闭不需要的nginx的worker进程
直接在HUP完成之后kill -QUIT 20724也可以。master和worker进程一同杀掉。