nginx平滑升级
因nginx版本更新迭代,现需要将nginx升级最新版本,目前最新版本nginx为1.23.1。为了不影响nginx运行,采用平滑升级的方式
下载全新版本
nginx官网地址:http://nginx.org/en/download.html
安装所需依赖包
yum -y install pcre-devel openssl openssl-devel
平滑升级(平滑升级有两种方法)
1.查看现有nginx版本
ps -ef | grep nginx
find / -name nginx # 找到nginx路径,默认路径是/usr/local/nginx/
/usr/local/nginx/sbin/nginx -V
2.下载最新版nginx版本(目前是1.23.1)
wget http://nginx.org/download/nginx-1.23.1.tar.gz
3.解压
tar -zxvf nginx-1.23.1.tar.gz
cd nginx-1.23.1
4.编译安装
./configure # 如果你查看nginx -V有configure arguments的话,命令为./configure 查到的参数
make #这里不进行make install
cd objs
5.备份旧nginx执行文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx$(date +%F)
6.修改配置文件(如果有必要的话,进行配置文件的修改并对旧配置文件进行备份)
cp /usr/local/nginx/conf/ngxin.conf /usr/local/nginx/conf/ngxin.conf$(date +%F)
vi nginx.conf
修改……
:wq保存退出
7.拷贝新版本nginx执行文件
cp /home/runtrend/nginx-1.23.1/objs/nginx /usr/local/nginx/sbin/
方法一
1.使用nginx自带方法更新升级
cd /home/runtrend/nginx-1.23.1/
make upgrade
2.不报错的话说明已经更新成功了,查看nginx版本
/usr/local/nginx/sbin/nginx -V
3.如果遇到上面的错误的话,需要将nginx服务停掉,然后使用绝对路径重新启动即可;
ps -ef | grep nginx
kill -9 nginx进程pid #杀掉nginx所有进程
cd /usr/local/nginx/sbin/
./nginx
cd /home/runtrend/nginx-1.23.1/
make upgrade
问题解决,但是出现第3步错误的话,需要杀掉所有进程,这个可能就不算平滑升级了,如果不影响服务的话,推荐使用这种,方便快捷
方法二
1.向旧master进程发送USR2信号,告知版本升级,旧master进程首先将logs/nginx.pid文件重命名为nginx.pid.oldbin,然后运行新版本Nginx二进制文件,启动新master进程,新master进程启动新worker进程,其中新master进程的父进程是旧master进程
ps -ef | grep nginx
kill -USR2 [old-master-pid]
2.向旧master进程发送WINCH信号,告知其优雅关闭旧worker进程,但旧master进程不会自动退出
kill -WINCH [old-master-pid]
3.如果确认新worker进程正常工作,可以向旧master进程发送QUIT信号,告知其自动退出
kill -QUIT [old-master-pid]
4.查看升级后Nginx版本
/usr/local/nginx/sbin/nginx -v
至此,升级完成!