准备一个全新的nginx源码包。
链接:https://pan.baidu.com/s/1SFaqiQDEwao6yuXUSVcPcw
提取码:k4z5
安装之前首先要考虑的是每一步操作是否影响nginx的正常运行。 每条命令在敲之前都要经过大脑。。。。
出于安全的考虑,需要更改nginx向外展示的服务器名以及版本号、404回显等安全隐患。 以防止黑客的恶意攻击。。(在make之前更改新nginx的版本信息。)
实验步骤:
查看原nginx的版本:
[root@nginx ~]# nginx -v
我这里的版本是1.10.3的。
上传新的软件包。
[root@nginx ~]# rz
解压到本地:
[root@nginx ~]# tar -zxvf nginx-1.14.2.tar.gz
查看nginx的现有进程:
备份原nginx启动脚本:
[root@nginx ~]# cd /usr/local/nginx/sbin/ && cp -f nginx nginx.old
更改新nginx服务的版本信息:
[root@nginx nginx-1.14.2]# vim src/core/nginx.h
更改防止回显版本号。
[root@nginx nginx-1.14.2]# vim src/http/ngx_http_header_filter_module.c
预编译:
[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx
查看新版nginx的启动脚本:
[root@nginx nginx-1.14.2]# cd objs/
结果是没有, 所以执行编译
[root@nginx nginx-1.14.2]# make
再次查看nginx的启动脚本:
有了!!
查看两个nginx的版本
注:./nginx 是我要升级的版本。 Nginx是我的原nginx,我做的软连接。现在就能证明,新版的nginx服务的版本号已经被改了。
做软连接命令:
[root@nginx sbin]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
替换nginx的启动脚本:
[root@nginx objs]# cp -f nginx /usr/local/nginx/sbin/nginx
查看nginx的pid进程:
向主进程发送不再接受请求指令:
[root@nginx objs]# kill -USR2 938
在查看pid:
我们发现,现在已经有了两个nginx-master的pid进程,这是为什么呢?
答案很明显了, 因为我上面已经给原nginx的master进程发送了一个不再接受请求的指令,所以新的nginx会在开启一个master的pid来接受新的请求。
所以出现了两个master进程。
现在我们验证一下:去访问我的nginx服务器:
192.168.100.102
访问成功,现在的nginx是可以被访问的。然后现在我们去结束原nginx的子进程:
[root@nginx objs]# kill -WINCH 938
从上图可发现,现在我们只剩下了一个nginx的子进程,而这个子进程是来源于我们的新版nginx的。
但是现在我们看到, 原nginx的master进程是存在的, 而且如果我们的新版nginx出现了一些bug,那么我们就可以根据原nginx的master进程来进行回滚操作, 从而可以快速的恢复nginx的正常功能,来减少公司的损失。
最后查看nginx的版本信息:
Ok
实验到此,就结束了。 关于nginx的热升级,实验步骤就这么多, 相对来说比较简单。 希望大家能够掌握
如果有兴趣, 可以接着把回滚做一下。 上面的命令我的标注了什么意思。 相信稍稍用心,就可以做成功。加油!!!
如有不懂或建议请私信我qq:34997003 欢迎交流(加好友表明来意)