Nginx平滑升级

问题

如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。但是这样会导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。

接下来我们分析下需求:

需求:Nginx的版本最开始使用的是Nginx-1.18.0,由于服务升级,需要将Nginx的版本升级到Nginx-1.20.2,要求Nginx不能中断提供服务。

为了应对上述的需求,提供两种解决方案:
方案一:使用Nginx服务信号完成Nginx的升级
方案二:使用Nginx安装目录的make命令完成升级

环境准备

  1. 先准备两个版本的Nginx分别是1.18.0和1.20.2

  2. 使用Nginx源码安装的方式将1.18.0版本安装成功并正确访问

# 进入安装目录
/configure 
make && make install
  1. 将Nginx1.20.2进行参数配置和编译,不需要进行安装。
# 进入安装目录 
./configure 
make

使用Nginx服务信号进行升级

  1. 将1.18.0版本的sbin目录下的nginx进行备份
cd /usr/local/nginx/sbin 
mv nginx nginxold
  1. 第二步:将Nginx1.20.2安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd ~/nginx/core/nginx-1.20.2/objs 2 cp nginx /usr/local/nginx/sbin
  1. 发送信号USR2给Nginx的1.18.0版本对应的master进程
    发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,
    并且新的master进程的PID会被记录在/usr/local/nginx/logs/nginx.pid
    而之前的旧的master进程 PID 会被记录在/usr/local/nginx/logs/nginx.pid.oldbin文件中
    接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭

  2. 发送信号QUIT给Nginx的1.18.0版本对应的master进程

kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

使用Nginx安装目录的make命令完成升级

  1. 将1.18.0版本的sbin目录下的nginx进行备份
cd /usr/local/nginx/sbin 
mv nginx nginxold
  1. 将Nginx1.20.2安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd ~/nginx/core/nginx-1.20.2/objs 
cp nginx /usr/local/nginx/sbin
  1. 进入到安装目录,执行make upgrade

  2. 查看是否更新成功

./nginx -v
上一篇:获取所有input值 处理成json格式再利用$.post提交


下一篇:nginx重新编译添加ssl模块--with-http_ssl_module