在不影响现有服务的情况下完成版本更新。这个过程包括安装依赖、下载和编译新版本、备份旧版本以及发送信号给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进程来回滚升级。