信号 | 含义 |
---|---|
HUP | 更改配置文件之后,重新生成worker进程读取新的配置文件,待旧的worker处理完请求以后关闭 |
USR1 | 日志切割 |
USR2 | 平滑升级 |
WINCH | 优雅关闭旧的worker进程 |
QUIT | 优雅退出进程 |
- HUP演示
此时nginx是默认界面“welcome to nginx”。
修改默认页面为“hup.html”页面,内容为“This is HUP;”
接下来将使用HUP方式,热加载配置文件。
确认nginx的PID并使用HUB信令方式加载配置文件
注意:如果是生产环境,当worker进程正在处理请求,我们使用HUP这种热加载的方式,会生成新的worker进程读取新的配置文件,老的worker进程处理完请求以后将会自动关闭,由上方截图可以看出,worker进程已经更改,接下来查看页面。
- USER1演示
- 修改index.html代码,这个作用是在web页面可以不断刷新。
<script language="JavaScript">
setTimeout(function(){location.reload()},1000); //指定1秒刷新一次
</script>
- 不断查看日志大小,确定前端代码已经生效
- 修改日志名称
修改了之后还是会写入日志,所以用这种备份的方式是可不取的,这是因为写入操作是写入到inode中。
- 切割日志
切割之前要先进行改名!切记!!
- USR2、WINCH、QUIT演示
#查看当前版本为1.14.2
nginx -v
#nginx version: nginx/1.14.2
#解压需要升级的版本
tar xvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
#注意不要make install!!会覆盖原来的配置文件!!!!!!!!!
./configure --prefix=/usr/local/nginx/ && make
#备份原来的nginx
cd /usr/local/nginx/sbin/
mv nginx nginx-1.14.2
#复制新版本的二进制文件
cd ~/nginx-1.20.1/objs/
cp -r nginx /usr/local/nginx/sbin/
#检测配置文件是否正常
nginx -t
#平滑升级nginx
ps -aux |grep nginx
#root 9695 0.0 0.0 20548 608 ? Ss 11:31 0:00 nginx: master process ./nginx
#nobody 9696 0.0 0.0 20992 1052 ? S 11:31 0:00 nginx: worker process
#root 9698 0.0 0.0 112812 972 pts/0 R+ 11:31 0:00 grep --color=auto nginx
#使用平滑升级信号
kill -USR2 9695
#查看pid文件,这时候会出现一个nginx.pid.oldbin文件,这是之前的pid,如果不知道pid文件路径可以查看nginx配置文件
ll /usr/local/nginx/logs/
#total 12
#-rw-r--r--. 1 root root 0 Dec 7 11:22 access.log
#-rw-r--r--. 1 root root 655 Dec 7 11:31 error.log
#-rw-r--r--. 1 root root 5 Dec 7 11:31 nginx.pid
#-rw-r--r--. 1 root root 5 Dec 7 11:31 nginx.pid.oldbin
cat /usr/local/nginx/logs/nginx.pid.oldbin
#9695
#关闭旧的worker进程
kill -WINCH 9695
#热加载nginx配置
kill -HUP 9695
#推出旧master进程
kill -QUIT 9695
#验证nginx升级是否成功
nginx -v
#nginx version: nginx/1.20.1