nginx-如何卸载和升级编译安装的版本
nginx-如何卸载和升级编译安装的版本
- 一、如何卸载编译安装的nignx?
- 二、如何升级编译安装的nginx?
- 1. 冷升级
- 2. 热升级
一、如何卸载编译安装的nignx?
以删除nginx2为例
-
删除安装目录
rm -rf /usr/local/nginx2
-
修改PATH变量,删除包含/usr/local/nginx2/sbin路径
临时修改PATH=/root/.local/bin:/root/bin:/usr/local/nginx3/sbin:/usr/local/nginx1/sbin:/usr/local/nginx3/sbin:/usr/local/nginx1/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
永久修改
修改以前配置过的PATH的环境变量的文件vim /etc/bashrc PATH=/usr/local/nginx1/sbin:$PATH#PATH=/usr/local/nginx2/sbin:$PATHPATH=/usr/local/nginx3/sbin:$PATH
-
如何以前设置了开机启动,也要取消
vim /etc/rc.local
#/usr/local/nginx2/sbin/nginx
二、如何升级编译安装的nginx?
nginx1.28.0 -->nginx 1.29.1
1、重新下载新版本的nginx源代码,编译安装到一个新的目录下
1.28 -->安装的路径–》/usr/local/nginx1 --》old version 旧版本
1.29 -->安装的路径–》/usr/local/nginx2 --》new version 新版本
编译参数必须与旧版本完全一致
2.先停止运行旧版本的nginx
3.启动新版本的nginx
这个新旧替换的过程中,需要考虑哪些问题?或者有哪些弊端?
1.旧的配置需要拷贝到新的nginx目录下
2.html目录下的网页需要拷贝到新的nginx目录下
另外一个思路
3.也可以拷贝新的编译好的nginx二进制程序到旧的目录下,替换旧的nginx主程序
cp /usr/local/nginx8/sbin/nginx /usr/local/nginx1/sbin
1. 冷升级
短暂停止服务
先备份旧的nginx主程序
[root@nginx-1 sbin]# cp /usr/local/nginx1/sbin/nginx /root/
替换旧的主程序
[root@nginx-1 sbin]# cp /usr/local/nginx8/sbin/nginx /usr/local/nginx1/sbin/
cp:是否覆盖’/usr/local/nginx1/sbin/nginx’? y
停止nginx
[root@nginx-1 sbin]# nginx -s stop
[root@nginx-1 sbin]# which nginx
/usr/local/nginx8/sbin/nginx
再启动新的nginx
[root@nginx-1 sbin]# /usr/local/nginx1/sbin/nginx
[root@nginx-1 sbin]# /usr/local/nginx1/sbin/nginx -v
nginx version: nginx/1.29.1
2. 热升级
不中断业务,去升级nginx主程序
[root@nginx-1 sbin]# /usr/local/nginx1/sbin/nginx
[root@nginx-1 sbin]# /usr/local/nginx1/sbin/nginx -v
nginx version: nginx/1.28.0
[root@nginx-1 sbin]# ps aux|grep nginx
root4772
0.0 0.0 12076 2304 ? Ss 15:38 0:00 nginx:master process
/usr/local/nginx1/sbin/nginx
nobody 4773 0.0 0.1 16364 5376 ? S 15:38 0:00 nginx: worker process
root 4776 0.0 0.0 6636 2176 pts/0 S+ 15:38 0:00 grep --color=auto nginx
1.先将旧的nginx二进制程序改名
[root@nginx-1 sbin]# mv nginx nginx.old
[root@nginx-1 sbin]# ls
nginx.old
2.再将新的nginx二进制程序拷贝过来
[root@nginx-1 sbin]# cp /usr/local/nginx8/sbin/nginx .
[root@nginx-1 sbin]# ls
nginx nginx.old
3.启动新的nginx
会出现下面的场景,新的nginx和旧的nginx都在运行
给原来的nginx的master进程发送12类型的信号,会告诉原来的nginx的master进程去重新加载nginx二进制程序,再次启动nginx的maser和woker进程。
最后会出现2组nginx进程,一组是旧的nginx的master和worker,一组是新的带vts功能的nginx的master和worker进程。
新旧进程共存的现象
[root@nginx-1 sbin]#
kill -12 4772
[root@nginx-1 sbin]# ps aux|grep nginx
root 4772 0.0 0.0 12076 2688 ? Ss 15:38 0:00 nginx: master process /usr/local/nginx1/sbin/nginx
nobody 4773 0.0 0.1 16364 5376 ? S 15:38 0:00 nginx: worker process
root 4783 0.0 0.1 12084 7296 ? S 15:43 0:00 nginx: master process /usr/local/nginx1/sbin/nginx
scfeng 4784 0.0 0.1 16368 5504 ? S 15:43 0:00 nginx: worker process
root 4786 0.0 0.0 6636 2176 pts/0 S+ 15:43 0:00 grep --color=auto nginx
4.杀死旧的nginx进程,包括master和worker
3) SIGQUIT 信号 优雅地停止进程
Master 进程会先通知所有 worker 进程停止接收新请求
Worker 进程会处理完当前正在处理的请求后,再退出
所有 Worker 进程退出后,Master 进程也会退出,最终 Nginx 服务完全停止
[root@nginx-1 sbin]#
kill -3 4772
[root@nginx-1 sbin]# ps aux|grep nginx
root 4783 0.0 0.1 12084 7296 ? S 15:43 0:00 nginx: master process /usr/local/nginx1/sbin/nginx
scfeng 4784 0.0 0.1 16368 5632 ? S 15:43 0:00 nginx: worker process
root 4789 0.0 0.0 6636 2176 pts/0 S+ 15:45 0:00 grep --color=auto nginx