Nginx 热升级

编译 Nginx

// 下载 Nginx 源码安装包
wget https://nginx.org/download/nginx-1.14.2.tar.gz
// 解压压缩包
tar -xzf nginx-1.14.2.tar.gz
// 进入源码目录
cd nginx-1.14.2
// 编译之前查看 configure 支持哪些参数
./configure --help | more
// 编译安装
./configure --prefix=/usr/local
make
make install    // 一般首次安装时执行此命令

热升级

// 更换最新版本的 Nginx,只需要更换最新编译的 nginx 二进制文件

// 备份现有的 nginx 二进制文件    
cd sbin
cp nginx nginx.old
// 拷贝最新编译的 nginx 二进制文件到运行的 nginx 安装目录下
cp -r nginx /usr/local/nginx/sbin/ -f   // 编译好的 nginx 二进制文件放在 objs 目录下
// 向正在运行的 master 进程发出一个信号,告诉它开始进行热部署,进行一次版本升级
kill -USR2 13195    // 13195 为正在运行的 master 进程号
// 查看进程状况(新老 master 和 worker 进程都在运行) 
ps -ef | grep nginx
// 向老的 master 进程发出一个信号,告诉它请优雅地关闭所有的 worker 进程
kill -WINCH 13195
// 如果发现新版有问题可以退回到老版本,向老的 master 进程发出重载信号
kill -SIGHUP 13195  // = nginx -s reload

日志切割

// 备份现有的 access.log 日志文件
mv access.log access.log.bak
// 重新生成新的 access.log 日志文件
nginx -s reopen // = 发送 USR1 信号

reload 流程:

  1. 向 master 进程发送 HUP 信号(reload)
  2. master 进程校验配置语法是否正确
  3. master 进程打开新的监听端口(可能在 nginx.conf 中配置了新的例如 443 端口)
  4. master 进程用新配置启动新的 worker 子进程
  5. master 进程向老 worker 子进程发送 QUIT 信号
  6. 老 worker 进程关闭监听句柄,处理完当前连接后结束进程

热升级流程:

  1. 将旧 Nginx 文件换成新 Nginx 文件(注意备份)
  2. 向 master 进程发送 USR2 信号
  3. master 进程修改 pid 文件名,加后缀 .oldbin
  4. master 进程用新 Nginx 文件启动新 master 进程
  5. 向老 master 进程发送 WINCH 信号,关闭老 worker
  6. 回滚:向老 master 发送 HUP,向新 master 发送 QUIT

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *