Nginx如何在线升级

发布时间 2023-08-31 09:16:37作者: 往事已成昨天

Nginx如何在线升级

Nginx根据安装方式不同,升级方式也不同,一般有三种:

  • yum方式安装,通过yum升级,不停机升级

  • 编译方式安装,通过编译方式升级,不停机升级

  • 容器方式安装,启动新容器方式升级,如果端口不变,需要停机,否则容器启动提示端口冲突

     

yum升级

1、首先查看通过yum安装的Nginx的版本,如图:

图片

从上图可以看出,当前版本比较旧,现在我们需要升级到较新的版本,yum安装的nginx建议还是通过yum方式升级,否则可能出问题(当然,出了问题也可以重新装,不过麻烦而已)

2、添加新的Nginx源,并安装,如下:

wget https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmrpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

3、清除当前的yum缓存后,升级Nginx,命令如下:

yum clean all && yum makecacheyum update nginx               #升级nginx

4、再次检查Nginx版本,已经升级到最新版本,如图:

图片

通过编译方式升级

编译方式升级Nginx的前提是你当前的Nginx也是编译安装的(非编译安装通过编译升级我没试过,有兴趣的可自己尝试)

1、首先进入编译安装后的路径下查看当前版本,如图:

图片

从上图看出,当前的Nginx版本为1.20.1,现在我们将其升级到1.24.0

2、将1.24.0版本压缩包上传到机器,解压缩,如下:

rz -y nginx-1.24.0.tar.gztar xf nginx-1.24.0.tar.gzcd nginx-1.24.0

3、编译Nginx,注意,编译的时候需要将第一步中的相关模块加上,如下:

./configure --prefix=/usr/local/nginx --with-stream --with-http_ssl_module

prefix指定的路径要与之前编译指定的路径一样

4、执行make命令,注意不要执行make install,如下:

make

5、备份原来的Nginx可执行文件,如下:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

6、替换新的二进制文件覆盖旧的,如下:

cp /root/nginx-1.24.0/objs/nginx /usr/local/nginx/sbin/

注意:新的二进制文件是在源码包编译后的objs目录下

7、检查Nginx配置,可以看到配置正常,如图:

图片

8、发送USR2信号给nginx master 进程,执行新的主进程和新的工作进程,依次启动新的主进程和新的工作进程,现在新,旧版本的nginx实例会同时运行,共同处理请求,如下:

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

图片

pid文件也有两个,如图:

图片

9、发送WINCH信号(平缓停止旧的worker process)和QUIT信号(停止旧的Nginx服务),如图:

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

图片

10、查看Nginx版本,已经升级完成,如图:

图片

注意:上述路径需要根据自己实际情况来修改

docker方式升级

docker方式升级比较简单,只要停止旧容器,然后新运行一个容器,并且保证新容器的挂载路径和旧的相同即可

1、首先查看当前容器运行的Nginx版本,执行命令如下:

docker inspect nginx

图片

2、查看当前Nginx的挂载文件信息,如图:

图片

3、停止当前Nginx,使用新镜像启动一个新的容器,如下:

docker stop nginxdocker run -itd --name new-nginx -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -p 80:80 nginx

4、再次查看容器中的Nginx镜像版本,已经升级成功,如图:

图片

注意:新的容器运行一段时间后,如果没有问题,就可以将旧的容器删除

宫关
收录于合集 #nginx
 10
上一篇Nginx中root和alias的区别
阅读 521
运维DevOps