参考:《Nginx高性能Web服务器详解》

思路如下:

  1. 备份原有的nginx目录
  2. 备份旧版本nginx主程序
  3. 编译安装新版本的nginx,使用原有的配置选项(原先部署的时候的),部署到同一个目录下
  4. 平滑升级,此时两个版本的nginx都同时运行
  5. 杀掉老的nginx进程
  6. 升级结束

具体操作如下:

​ 1.查看原有的编译选项

[lileikf2016@instance-docker1-k9jk sbin]$ ./nginx -V
nginx version: nginx/1.13.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.2k  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-pcre=/home/lileikf2016/nginx/pcre-8.40 --with-zlib=/home/lileikf2016/nginx/zlib-1.2.11 --with-http_ssl_module --with-openssl=/home/lileikf2016/nginx/openssl-1.0.2k

​ 2.备份旧版本的nginx

$sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.oldbin

​ 3.编译新版的nginx

$sudo --prefix=/usr/local/nginx --with-pcre=/home/lileikf2016/nginx/pcre-8.40 --with-zlib=/home/lileikf2016/nginx/zlib-1.2.11 --with-http_ssl_module --with-openssl=/home/lileikf2016/nginx/openssl-1.0.2k
$sudo make &&N sudo make install 

​ 4.平滑升级

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

此时,在logs目录下,之前的pid文件变为nginx.pid.oldbin:

$ ls -l ../logs/

查看nginx进程,此时有两个nginx进程同时在运行;

$ps -ef|grep nginx

关闭旧的nginx进程

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

参考Nginx可接收信号

TERM或 INT                 快速停止nginx

QUIT                            平缓停止nginx

HUP                             平滑重启

USR1                            重新打开日志文件,常用于日志切割

USR2                            平滑升级

WINCH                        平缓停止worker process,用于nginx平滑升级