参考:《Nginx高性能Web服务器详解》
思路如下:
- 备份原有的nginx目录
- 备份旧版本nginx主程序
- 编译安装新版本的nginx,使用原有的配置选项(原先部署的时候的),部署到同一个目录下
- 平滑升级,此时两个版本的nginx都同时运行
- 杀掉老的nginx进程
- 升级结束
具体操作如下:
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
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:
查看nginx进程,此时有两个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平滑升级