nginx reload热加载实现

本文深入探讨Nginx的reload热加载机制,包括通过发送HUP信号触发配置重载,新旧worker进程切换流程,及如何优雅地处理现有连接而不中断服务。详细解释了master进程如何校验配置,启动新worker并通知旧worker平滑退出,确保服务连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx reload热加载实现

1.向master进程发送HUP信号(reload 命令),master进程中的ngx_reconfigure设置1 
2.master进程校验配置语法是否正确 
3.master进程打开新的监听端口(子进程会继承父进程打开的所有端口) 
4.master进程用新配置启动新的worker子进程,ngx_start_worker_processes(NGX_PROCESS_JUST_RESPAWN)新的子进
程,ngx_spawn_process函数中将判断NGX_PROCESS_JUST_RESPAWN,将ngx_processes数组respawn和just_spawn都是1
5.master进程向老worker子进程发送QUIT信号

(1)ngx_signal_worker_processes,老worker子进程的exiting设置为1,ngx_processes[i].exiting  =1

(2)子进程收到信号将子进程的ngx_quit设置为1

问题: 
如何判断向哪些老worker子进程发送信号呢?ngx_process数据中just_spawn标记不是1的 

老worker子进程退出后,master进程收到信号SIGCHLD信号,ngx_reap位置1,主进程执行ngx_reap_children函数,为什么没有讲死亡的子进程重新拉起?在ngx_reap_child函数中ngx_processes.ngx_exiting为1的进程不调用ngx_spawn_children生成子进程
6.老worker进程关闭监听句柄(标志新的连接只会到新的worker),设置ngx_exiting为1,处理完当前连接结束进程,定
时器超时则退出worker;
6.1ngx_exiting为1,则开始准备关闭worker进程 
(1)根据当前ngx_cycle_t中所有正在处理的连接,调用它们对应的关闭连接处理方法 
就是将连接中的close标志位置为1,再调用读事件的处理方法 
(2)检查ngx_event_timer_rbtree红黑树不为空,调用ngx_process_events_and_timers方法处理事件 
如果为空,表示已经处理完所有的事件,这时将调用所有模块的exit_process方法,最后销毁内存池,退出整个worker进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值