跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Nginx中WebSocket代理断线自动重连的配置保障

Nginx需显式配置WebSocket透传:启用HTTP/1.1、Upgrade/Connection头,调优proxy_read_timeout等超时参数,关闭缓冲与压缩,并可配置upstream健康检查。 WebSocket 代理在 Nginx 中默认不保持长连接,容易因超时、心跳缺失或反向代理层干预导致断线;要实现稳定连接,关键不是“自动重连”(那是前端逻辑),而是让 Nginx 正确透传 WebSocket 协议、维持 TCP 连接不被中断,并配合合理的超时与头部设置。 启用 WebSocket 协议升级支持 Nginx 必须显式处理
Upgrade
和
Connection
头,否则会将 WebSocket 请求当作普通 HTTP 处理并关闭连接: 在
location
块中添加: proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade"; 确保后端服务(如 Node.js、Spring Boot)也正确响应
101 Switching Protocols
,否则 Nginx 会回退为 200 并终止升级流程。 调优超时参数防止非预期断连 默认的 Nginx 超时值(如
proxy_read_timeout
默认 60s)远低于 WebSocket 的典型空闲时长,需延长: proxy_read_timeout 86400; —— 设置为 24 小时,允许长时间无数据传输(如后台监控连接) proxy_send_timeout 86400; —— 同步匹配发送超时 proxy_connect_timeout 30; —— 保持合理,避免后端不可达时阻塞过久 注意:这些值需与后端服务的 keepalive 和心跳间隔协调,例如后端每 30 秒发一次 ping,则 timeout 至少设为 45 秒以上。 禁用缓冲与压缩保障实时性 启用缓冲或 gzip 压缩可能截断流式帧、破坏 WebSocket 二进制/文本帧边界: proxy_buffering off; —— 关闭响应缓冲,避免延迟或粘包 proxy_buffer_size 4k; —— 若必须设缓冲区,保持最小且对齐帧大小 gzip off; 或至少确保
gzip_types
不包含
text/event-stream
或自定义 WebSocket MIME 类型 可选:添加健康检查与平滑故障转移 当后端实例宕机时,Nginx 可快速切换节点,减少重连失败窗口: 使用
upstream
块定义多个后端,开启
keepalive
连接池: upstream ws_backend {server 192.168.1.10:8080;server 192.168.1.11:8080;keepalive 32;} 配合
proxy_next_upstream error timeout http_500;
实现失败自动转发 前端仍需实现重连逻辑(如指数退避),但 Nginx 层已不再成为单点断连诱因。

相关文章