目录

1.升级原因

2.升级流程

2.1 获取当前版本的Nginx参数

2.2 下载最新版Nginx并且进行编译,但是不要进行安装

2.3 备份原来的Nginx命令(用mv命令,不是cp命令)

2.4 复制当前Nginx源码的nginx命令用来替换原来的nginx命令

2.5 重载Nginx并测试

2.6 总结



1.升级原因

截止到2019.12.10号,Nginx的稳定版本已经更新到Nginx-1.16.1,然后发现线上的Nginx有的是1.4.0,1.6.0等等,对Nginx很多新出的指令都不支持,无论是从安全,需求等方面出发,都需要更高版本的Nginx,然而线上的Nginx是正在跑着业务的,Nginx是不能关闭的,不过Nginx官方支持Nginx的热部署,也就是平滑升级,在您不关闭的Nginx情况下进行全新升级,不会影响您正在跑的业务,下面就来看看整个Nginx平滑升级的流程。

2.升级流程

2.1 获取当前版本的Nginx参数

$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.0  #当前Nginx版本
......
#下面这一串是的编译参数(这平滑升级的时候,编译参数记得不要改变)
configure arguments: --prefix=/opt/app/nginx --user=www --group=www --with-http_stub_status_module --with-ld-opt=-ljemalloc --add-module=/opt/src/ngx_cache_purge-2.5 --with-http_v2_module --with-http_sub_module --with-openssl=/opt/src/openssl-1.0.2p --with-http_ssl_module

2.2 下载最新版Nginx并且进行编译,但是不要进行安装

注:一定要记得不要进行make install 一定要记得不要进行make install  一定要记得不要进行make install  (重要的事说三遍)

#进入到软件安装目录,我的默认是/opt/src
$ cd /opt/src/

#下载最新版的Nginx
$ wget http://nginx.org/download/nginx-1.16.1.tar.gz 

#解压
$ tar xf nginx-1.16.1.tar.gz
$ cd nginx-1.16.1

#进行环境检测(如果你原来的相关软件已经删除的话,需要重新下载,同时这里软件下载最新版的话,一般没有问题)
$ ./configure --prefix=/opt/app/nginx --user=www --group=www --with-http_stub_status_module --with-ld-opt=-ljemalloc --add-module=/opt/src/ngx_cache_purge-2.5 --with-http_v2_module --with-http_sub_module --with-openssl=/opt/src/openssl-1.0.2p --with-http_ssl_module

#编辑  -j 后面加核数 一般服务器的cpu都是多核的,指定多核进行编译可以加快编译速度
$ make -j 8

#查看当前目录有没有 Nginx 命令(当make编辑完成会在这里生成相应的Nginx命令)
$ ll objs/nginx

2.3 备份原来的Nginx命令(用mv命令,不是cp命令)

#这里一定得mv,将原来的Nginx命令重新命名,不然后面的Nginx命令就cp不了,我跌在这里好几次了,同时也可以用于恢复
$ mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak  

注:根据线上安全操作规范,在进行此步的时候一定要确保全面步骤没有任何问题在执行此步

2.4 复制当前Nginx源码的nginx命令用来替换原来的nginx命令

$ cp  objs/nginx /opt/app/nginx/sbin/

2.5 重载Nginx并测试

#下面命令没有报错的话,进行平滑升级基本是没有问题,如果出问题了,你倒回去看下哪个步骤没有做好(容易出问题的步骤是 2.2 跟 2.4步骤)
$ /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /opt/app/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/app/nginx/conf/nginx.conf test is successful

#重载配置文件,上面那步没有报错,这步就很难报错
$ /usr/local/nginx/sbin/nginx -s reload

#看下是不是你升级后的版本号,是的话,代表Nginx平滑升级成功
$ /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.1

2.6 总结

实际Nginx的平滑升级还是蛮简单的,只要细心点,命令没有用错,按照我的步骤基本可以一步到位