當 NGINX 設定重新載入時,現有的 HTTP 和 Websocket 連線會發生什麼事?

當 NGINX 設定重新載入時,現有的 HTTP 和 Websocket 連線會發生什麼事?

假設我們有一個非常標準的藍/綠部署設定。 NGINX 目前正在將所有流量代理到即時伺服器(藍色)。然後,我們將程式碼的更新版本部署到空閒伺服器(綠色)。最後,我們刷新 NGINX 配置,以便所有 HTTP 流量都路由到 GREEN。

據我了解,NGINX 將優雅地處理此重新加載。未來的所有 HTTP 請求都將路由到 GREEN,所有發送到 BLUE 的待處理 HTTP 請求將由 BLUE 處理。

但是 WebSocket 呢?假設重新載入設定時,BLUE 有 10 個即時 WebSocket 連線。他們會怎樣?

根據我對 NGINX 文件的理解,如果沒有新資料發送,連線將在 60 秒後終止。

但是,如果客戶端使用某種 keep-alive 或 ping,那麼我想 WebSocket 連線將無限期地保持,即使 BLUE 不再提供任何其他 HTTP 流量。

我的直覺在這裡嗎?如果是這樣,我想 BLUE 要么需要關閉連接本身,要么客戶端程式碼需要關閉連接,除非 NGINX 有我缺少的功能。

答案1

正確的,連接將無限期地保持。有專門的指令來處理此類情況:

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

相關內容