nginx 平滑升级

旧版本信息获取

根据配置不同,路径上会有不同

  • 旧版本信息

    • 版本号
    • 配置信息 重要, 新版本应该与旧版本一致
      [root@xxx ~]# cd /usr/local/nginx
      [root@xxx nginx]# ./nginx -V
      nginx version: nginx/1.12.1
      built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
      built with OpenSSL 1.1.0f  25 May 2017
      TLS SNI support enabled
      configure arguments: --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --with-pcre --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.0f
  • 对于上面的 --with-openssl=/usr/local/src/openssl-1.1.0f 可以使用新的版本,下载最新的openssl库

编译新的nginx版本

cd /usr/local/src
# wget https://www.openssl.org/source/openssl-x.x.x.tar.gz
# tar -zxvf openssl-x.x.x.tar.gz
wget http://nginx.org/download/nginx-x.x.x.tar.gz
tar -zxvf nginx-x.x.x.tar.gz
mv nginx-x.x.x /usr/local/
yum install -y pcre-devel zlib-devel

cd /usr/local/nginx-x.x.x
./configure **此处加上原来的配置**
make        ## 只编译,不安装!!!

开始升级

## 备份旧文件
cd /usr/local/nginx
mv nginx nginx.x.x.x.old

## 复制新文件
cp /usr/local/nginx-x.x.x/objs/nginx /usr/local/nginx/

## 查看旧的nginx信息   旧pid 980
[root@xxx nginx]# ps -aux | grep nginx | grep -v grep
root       980  0.0  0.0  26300  3816 ?        S    10:09   0:00 nginx: master process ./nginx
root       981  0.0  0.0  27696  5480 ?        S    10:09   0:01 nginx: worker process
root       982  0.0  0.0  27720  5484 ?        S    10:09   0:02 nginx: worker process

## 测试 
[root@xxx nginx]# /usr/local/nginx/nginx -t
nginx: the configuration file xxxx/nginx.conf syntax is ok
nginx: configuration file xxxx/nginx.conf test is successful

## 启动新的master进程   新的pid 1000
## 此时新旧master同时处理请求
kill -USR2 980
# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

## 旧线程停止处理请求
kill -WINCH 980

## 如果测试没有问题,则可以停止旧进程
kill -QUIT 980
# test -f /usr/local/nginx/logs/nginx.pid.oldbin
# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

## 恢复原来的文件
mv /usr/local/nginx/nginx /usr/local/nginx/nginx.x.x.x
mv /usr/local/nginx/nginx.x.x.x.old /usr/local/nginx/nginx

## 如果出现问题,则需要回滚
## 重新启动旧master
kill -HUP 980
kill -QUIT 1000

## 最后恢复nginx二进制文件即可

Nginx 的信号控制

SIG comment
TERM, INT 快速关闭
QUIT 从容关闭
HUP 平滑重启,重新加载配置文件
USR1 重新打开日志文件,在切割日志时用途较大
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
文档更新时间: 2019-06-13 11:59   作者:sapluk