nginx的热升级/nginx的平滑升级

准备一个全新的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 欢迎交流(加好友表明来意)

Nginx平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法。这种升级方式确保了服务的高可用性,避免了因升级导致的请求中断问题。以下是实现Nginx平滑升级的具体步骤: ### 1. 下载并编译新版本Nginx 首先,需要下载目标版本的Nginx源码包,并解压。进入解压后的目录后,使用与当前运行版本相同的配置参数进行编译,同时可以添加新的模块或修改配置参数以满足需求。 ```bash # 下载新版本Nginx wget http://nginx.org/download/nginx-1.20.0.tar.gz tar -zxvf nginx-1.20.0.tar.gz cd nginx-1.20.0 # 使用与旧版本相同的配置参数进行编译,可通过nginx -V命令查看当前运行的配置参数 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../some-module make ``` ### 2. 替换旧的Nginx二进制文件 编译完成后,`objs/nginx`即为新的Nginx可执行文件。将其替换掉旧的Nginx二进制文件,通常位于`/usr/local/nginx/sbin/`目录下。 ```bash cp /path/to/nginx-1.20.0/objs/nginx /usr/local/nginx/sbin/ ``` ### 3. 发送USR2信号给Nginx主进程 通过向Nginx主进程发送USR2信号,触发平滑升级过程。这将启动新的Nginx进程,使用新的二进制文件,同时保留旧的进程以处理尚未完成的请求。 ```bash kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` ``` ### 4. 关闭旧的Nginx进程 一旦确认新版本的Nginx已经成功启动并正常工作,可以通过发送WINCH信号给旧的主进程,让其关闭所有连接并退出。这个过程可能需要一些时间,具体取决于当前正在处理的请求数量。 ```bash kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` ``` ### 5. 验证升级 最后,验证Nginx是否已成功升级到新版本,并检查是否有任何错误或异常情况。 ```bash /usr/local/nginx/sbin/nginx -v ``` ### 注意事项 - 在执行平滑升级之前,建议备份现有的Nginx配置文件和二进制文件,以便于出现问题时快速回滚。 - 确保在编译新版本时使用的配置参数与旧版本一致,否则可能导致配置不兼容的问题。 - 如果在升级过程中遇到问题,可以通过发送HUP信号给Nginx主进程来重新加载旧的配置文件,或者直接恢复备份的二进制文件[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值