Nginx 的reload,升级以及关闭流程

一、reload流程

1 向master进程发送HUP信号(reload命令)
2 master进程校验配置语法是否正确;
3 master打开可能引入的新的监听端口;
4 master用新的配置文件启动新的worker子进程;
5 启动新的worker子进程之后,master向老的worker子进程发送QUIT信号(优雅的退出);
6 老的子进程收到QUIT信号之后,关闭监听句柄(也就是说,新的连接只会到新的子进程),处理完当前的连接后就结束进程;

二、热升级的流程

将久的Nginx文件替换成新的Nginx文件(注意备份);

向master进程发送USR2信号;

Nginx还没有提供相应的命令行

之后,现有的master进程会修改pid文件名,加后缀oldbin;

这是为了给新的master进程让路;

老的master进程,用新的Nginx二进制文件,启动新的master进程;

此时,会出现两个master进程和老的worker进程。新的master进程会启动新的worker进程

向老的master进程发送QUIT信号,关闭老的进程;

此时老的master进程会关闭老的worker进程。此时,热升级已经结束,老的master进程会一直保留,这是为了方便回滚。

回滚:向老的master进程发送HUP,向新的master发送QUIT;

三、关闭

优雅的关闭,是对worker进程而言的。因为只有worker进程才会处理请求。

优雅的关闭,是指worker进程可以识别当前的连接没有处理请求,这个时候再将连接关闭。

Nginx是不是一直能做到优雅地关闭子进程呢? 并不是的,比如说代理websocket协议时,在

websocket协议后面进行 通讯的fream帧中,Nginx是不解析帧的,所以此时Nginx是无法知道处 理

是否已经完成了的;再比如,Nginx做tcp和udp层的反向代理的时候, 它也没法知道一个请求究竟

要经过多少次报文才算真正地结束,但是对于 http请求来说,Nginx是可以做到的,所以我们说的

优雅地关闭针对的一般 是http请求。

设置一个定时器

worker_shutdown_timeout,nginx会设置一个标示为,表示进入优雅的关闭的流程。

关闭监听句柄

保证worker进程不会处理新的连接了。

关闭所有的空闲连接

在循环中等待全部连接关闭

如果等待的时候超过了设定的worker_shutdown_timeout时间,连接也会被强制关闭。

退出进程

 在主配置文件(main)中 增加 参数:worker_shutdown_timeout   240s;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值