nginx-超时后不正常的工作进程终止

nginx-超时后不正常的工作进程终止,nginx,websocket,Nginx,Websocket,我计划使用nginx代理websockets。在执行nginx reload/HUP时,我知道nginx会等待旧的工作进程停止处理所有请求。然而,在websocket连接中,这种情况可能不会持续很长时间,因为连接是持久的。是否有在重新加载超时后强制终止旧工作进程的选项/路线图 参考资料: 谢谢除非您有任何解决方案:代理读取超时1d或ping消息来保持连接活动,否则Nginx将在60秒内关闭连接。选择此默认值是有原因的 查看Nginx核心开发人员所做的工作: 存在代理读取超时() 这同样适用于

我计划使用nginx代理websockets。在执行nginx reload/HUP时,我知道nginx会等待旧的工作进程停止处理所有请求。然而,在websocket连接中,这种情况可能不会持续很长时间,因为连接是持久的。是否有在重新加载超时后强制终止旧工作进程的选项/路线图

参考资料:


谢谢

除非您有任何解决方案:代理读取超时1d或ping消息来保持连接活动,否则Nginx将在60秒内关闭连接。选择此默认值是有原因的

查看Nginx核心开发人员所做的工作:

存在代理读取超时() 这同样适用于WebSocket连接。你得撞它 如果您的后端长时间不发送任何内容。或者, 您可以将后端配置为发送websocket ping帧 定期重置超时(并检查连接是否正常) 还活着)


话虽如此,但没有什么可以阻止您使用USR2+QUIT信号组合,这通常是在二进制升级时重新启动Nginx时使用的组合。Nginx主/辅进程消耗的内存很少超过50MB,因此保留多个主进程并不昂贵。USR2帮助分叉新的主服务器并生成其工作进程,然后优雅地关闭旧的工作进程和主服务器。

如果确实有来自后端服务器的周期性ping,连接将不会终止。然而,在您回答后再次阅读“控制nginx”文档,我认为在将HUP发送给主nginx并等待几分钟后,我可以简单地将TERM(快速关机)发送给仍然活着的旧工人,以终止他们。是的,确切地说,USR2信号分叉新的主设备,开始为新客户提供服务,然后,如果由于连接打开而无法正常关机,则需要先退出到旧主机,然后是INT或TERM信号。为什么建议使用USR2而不是HUP,这样可以在不产生新主机的情况下生成新的工作线程?@dux2 USR2有助于将新主机及其工作线程与旧主机分开。并通过向老主人发送术语信号,一次性终止所有老工人。