我计划使用nginx代理websockets。当执行nginx reload/HUP时,我知道nginx等待旧的工作进程停止处理所有请求。然而,在websocket连接中,这可能不会发生很长时间,因为连接是持久的。是否有一个选项/路线图强制杀死旧的工作进程超时后重新加载?
引用:http://nginx.org/en/docs/control.html
http://forum.nginx.org/read.php?21, 247573、247651 #味精- 247651
谢谢
除非你有解决方案:proxy_read_timeout 1d或ping消息保持连接存活,否则Nginx将在60秒内关闭连接。此默认值是由原因选择的。
查看Nginx核心开发人员说的话:
proxy_read_timeout (http://nginx.org/r/proxy_read_timeout)这也适用于WebSocket连接。你必须撞到它如果你的后台不发送任何东西很长一段时间。另外,你可以配置你的后端发送websocket ping帧定期重置超时时间(并检查连接是否正常)还活着)。
已经说过,没有什么应该阻止你使用USR2+QUIT信号组合,通常使用当你优雅地重启Nginx二进制升级。Nginx主/工作进程很少消耗超过50MB的内存,所以保持多个主进程并不那么昂贵。USR2帮助分叉新的master并生成它的worker,然后优雅地关闭旧的worker和master。