当 NGINX 配置重新加载时,现有的 HTTP 和 Websocket 连接会发生什么?

当 NGINX 配置重新加载时,现有的 HTTP 和 Websocket 连接会发生什么?

假设我们有一个非常标准的蓝/绿部署设置。NGINX 当前正在将所有流量代理到实时服务器 (BLUE)。然后,我们将代码的更新版本部署到空闲服务器 (GREEN)。最后,我们刷新 NGINX 配置,以便所有 HTTP 流量都被路由到 GREEN。

据我了解,NGINX 将妥善处理此重新加载。所有未来的 HTTP 请求都将路由到 GREEN,而所有发送到 BLUE 的待处理 HTTP 请求都将由 BLUE 处理。

但是 WebSocket 呢?假设在重新加载配置时,BLUE 有 10 个活动的 WebSocket 连接。它们会怎样?

根据我对 NGINX 文档的理解,如果没有新数据发送,连接将在60秒后终止。

然而,如果客户端使用某种保持活动或 ping,那么我想即使 BLUE 不再提供任何其他 HTTP 流量,WebSocket 连接也会无限期地维持。

我的直觉正确吗?如果是这样,我会想象 BLUE 要么需要自己关闭连接,要么客户端代码需要关闭连接,除非 NGINX 具有我所缺少的功能。

答案1

正确,连接将无限期保持。有特殊指令来处理此类情况:

https://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout

相关内容