m-zhuang

导航

Nginx 平滑升级

升级 nginx-1.12.0 到 nginx-1.22.0

1. 查看版本

nginx -v

image-20230828192540914

2. 下载或上传 nginx 1.22.0 版本

wget -O /opt/nginx-1.22.0.tar.gz https://nginx.org/download/nginx-1.22.0.tar.gz
tar -xf /opt/nginx-1.22.0.tar.gz

image-20230828193155646

3. 安装编译环境依赖包

yum -y install \
pcre-devel \
zlib-devel \
gcc \
gcc-c++ \
make \
openssl \
openssl-devel

image-20230828193616256

4. 设置安装路径及模块

cd /opt/nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module

image-20230828195158886

5. 编译

按照原来的编译参数安装 nginx 的方法进行安装,只需要到 make,千万不要 make install 。如果make install 会将原来的配置文件覆盖

make

6. 备份原二进制文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

image-20230829180434138

7. 更换二进制文件

复制新的nginx二进制文件,进入新的nginx源码包

cp /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/

image-20230829181106365

8. 测试新Ngin二进制

测试新版本的nginx是否正常

/usr/local/nginx/sbin/nginx -t

image-20230829181424875

9. 发送平滑信号

给nginx发送平滑迁移信号(若不清楚pid路径,请查看nginx配置文件)

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

# 查看nginx pid,会出现一个nginx.pid.oldbin
ll /usr/local/nginx/logs/
-rw-r--r--. 1 root root  5 8月  28 19:22 nginx.pid.oldbin

image-20230829182046268

10. 逐步关闭旧Nginx的工作

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

11. 加载新的配置文件

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

重载旧的nginx工作进程是为了使其加载新的配置文件,以应用升级后的配置。在nginx的平滑升级过程中,我们先启动了新版本的nginx进程,并将请求逐渐迁移到新进程上,同时旧进程仍然在工作。当所有请求都转移到新进程后,就可以关闭旧进程。

在关闭旧进程之前,我们需要确保新进程已经加载了更新后的配置文件。通过发送HUP(Hang Up)信号给旧进程,可以实现重新加载配置文件,使旧进程使用新的配置。这样可以确保在关闭旧进程之前,新进程已经开始使用新的配置,从而实现平滑过渡,避免在升级过程中出现服务中断或配置冲突的情况。

因此,kill -HUP cat /var/run/nginx.pid.oldbin``命令的作用是向旧进程发送HUP信号,要求重新加载配置文件并应用更新后的配置。

12. 结束旧Nginx工作进程

结束工作进程,完成此次升级

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

13. 验证Nginx是否升级成功

nginx -v
lsof -i:80

image-20230829195700145

posted on 2023-09-01 16:29  m_zhuang  阅读(132)  评论(0编辑  收藏  举报