(1)查看当前安装的nginx的版本
当前所在目录:
nginx -v:
nginx -V:
(2)在官网下载一个新版本安装包,这里下Linux系统的,得到![](https://i-blog.csdnimg.cn/blog_migrate/ebe2236037b827c359b68d74c695d8e3.png)
将安装包上传到阿里云远程服务器的/root目录下,如下图:
(3)解压
tar -zxvf nginx-1.21.4.tar.gz
得到一个新的文件:
(4)配置
查看nginx-1.21.4目录下的文件:
执行./configure来设置新版本安装参数:
...
成功后再次查看nginx-1.21.4目录:
发现多了Makefile文件和objs目录
查看Makefile文件的内容:
查看objs目录下的文件:
(5)构建
!!make知识参考:Make 命令教程 - 阮一峰的网络日志
执行make会读取nginx-1.21.4目录下生成的Makefile文件,
Makefile文件的内容中有这些内容:
default: build
build:
$(MAKE) -f objs/Makefile
so,执行make默认就是构建,下图的make -f objs/Makefile也可以说明
...
构建完成后,objs目录下生成了可执行文件nginx
(6)备份二进制文件。
将nginx/sbin目录下的二进制文件nginx移动到上级目录nginx下,
查看sbin目录,发现没有nginx文件了。
(7)更换新的nginx二进制文件到sbin目录下
cp objs/nginx /usr/local/nginx/sbin/
sbin目录的nginx又回来了:
(8)用新的nginx二进制文件检查nginx.conf文件
没问题!
(9)平滑升级nginx(主要步骤)
!!前提是已经启动了旧版本的nginx,否则没有nginx.pid这个文件。
kill -USR2 `cat logs/nginx.pid`
cat logs/nginx.pid 是想拿到就nginx版本启动的主进程id ,
发送USR2信号给该主进程,如下图:
该主进程会重命名nginx.pid为nginx.pid.oldbin
执行新的nginx二进制文件--也就是我们平时启动nginx的命令 ./nginx(假设我当前在/usr/local/nginx/sbin目录下),来启动新的master process和新的worker process
启动新master process所以logs文件下生成了新的nginx.pid文件,其主进程id为17111。
查看进程信息也可以看到当前有2个主进程,分别是pid=17080 和 pid=17111。
即同时跑了2个nginx实例,一个新版本的nginx,一个旧版本的nginx。
后续请看该链接的WINCH信号及后面的内容:CSDN
(10) 再次查看nginx版本![](https://i-blog.csdnimg.cn/blog_migrate/7a51b3d55bd186e1f17b8fc2c2881f35.png)
nginx从1.20.1升级到了1.21.4!