Nginx 在不停掉老进程的情况下 升级版本启动新进程 老进程负责处理仍然没有处理完的请求,新进程接替老进程开始接收请求
./nginx -V # 查看当前版本
cp /usr/local/server/nginx/sbin/nginx nginx.old # 备份旧版本的可执行文件
# 下载最新Nginx并编译,要注意的是只执行make时 不能紧接着 make install 这样会覆盖你的二进制文件 这里只升级版本
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar xf nginx-1.14.0.tar.gz
cd nginx-1.14.0/
./configure --prefix=/usr/local/server/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module # 最后一个模块是新增的 获取后端真实IP地址
make # 千万不要make install
# 拷贝新的可执行文件到旧版本的目录下
cp -rfp nginx-1.14.0/objs/nginx /usr/local/server/nginx/sbin/
# 检查配置文件有没有错误
./nginx -t
# 发送信号给旧master进程 接着启动新进程
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
# 发送WINCH给旧master 让他优雅的退出 (因为发送USR2信号之后 旧master进程会重名为 nginx.pid.oldbin)
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
# 当旧master进程接受完所有之前的剩余请求之后 就可以发送QUIT让其退出即可
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
#如果升级失败 新master进程没有接受请求 可以用下面2种方式快速回退
# 发送HUP信号给旧master进程。旧master进程会在不重新读取配置文件的情况下直接启动新的worker进程。然后就可以发送QUIT信号给新master进程,使所有新进程可以优雅退出。
kill -HUP 15023
kill -QUIT 15130
#发送TERM信号给新master进程。新master进程发送信号关闭所有的worker进程(如果因为某些原因新的进程没有退出,就得发送KILL信号强制退出了)。当新master进程退出后,旧master进程会自动启动它的worker进程。
kill -TERM 15130
kill -9 15130
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于