在不影响现有服务的情况下完成版本更新。这个过程包括安装依赖、下载和编译新版本、备份旧版本以及发送信号给Nginx进程来实现平滑升级。

1: 安装依赖

安装必要的编译工具和库文件。

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

2: 下载并解压Nginx源码包

选择一个适合的新版本进行下载,并解压缩。

wget https://nginx.org/download/nginx-1.29.0.tar.gz
tar xf nginx-1.29.0.tar.gz 

3: 编译新版本Nginx

进入解压后的目录,配置编译选项并仅执行make命令(不要使用make install)。

cd nginx-1.29.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module
make

4: 备份旧版Nginx

在替换之前,先备份当前正在运行的Nginx二进制文件。

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

5: 测试新版本配置

在实际替换前,测试新版本Nginx配置是否正确。

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

6: 开始平滑升级

通过向master进程发送USR2信号开始平滑升级。

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

此时,旧版Nginx的PID文件名将被修改为nginx.pid.oldbin,同时启动新的master进程,两个版本的Nginx将共同提供服务。

7: 停止旧版Nginx的worker进程

逐步关闭旧版Nginx的worker进程,但保持旧版master进程不退出以便于回滚。

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

8: 完成升级

确认新版本工作正常后,可以通过发送QUIT信号关闭旧版Nginx的master进程。

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

这将完全移除旧版本的Nginx,完成整个平滑升级过程。

如果在升级过程中遇到问题,可以通过发送HUP信号给旧master进程并发送QUIT信号给新master进程来回滚升级。