FAQ WebSocket与SSE及反向代理配置

3 阅读2分钟

Skeyevss FAQ:WebSocket、SSE 与反向代理配置

试用安装包下载 | SMS | 在线演示

项目地址github.com/openskeye/g…


1. 问题现象

  • 管理后台 实时 SIP 日志 不刷新或延迟极大;
  • 服务状态 / 可观测性 SSE 页面卡住;
  • 视频调阅 WebSocket 连接失败、频繁断开;
  • 直连 IP 正常,经 Nginx/Caddy 域名访问异常。

2. SSE 与 WebSocket 的差异

  • SSE:基于 HTTP 长连接,单向推送;中间代理需关闭响应缓冲,并保持较长 读超时
  • WebSocket:协议升级(Upgrade: websocket),代理需显式支持并转发 Connection/Upgrade 头。

错误配置的典型症状是:连接建立后首包可见,之后永远卡住


3. Nginx 常见要点(示例)

  • proxy_http_version 1.1
  • SSE:proxy_buffering off;proxy_read_timeout 设大(如 24h);
  • WebSocket:proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade"
  • 若 HTTPS 终止在 Nginx,确保后端 scheme/Host 与 Cookie 域一致,避免鉴权 Cookie 丢失。

具体指令以实际 nginx.conf 与项目文档为准,此处强调 方向 而非复制粘贴配置。


4. 负载均衡与粘性

多实例时,若 WebSocket/SSE 被轮询到不同后端,会导致会话态丢失。需要:

  • 会话粘性(sticky session);或
  • 架构上改为 无状态 + 独立消息总线(取决于产品实现)。

5. 浏览器与中间安全设备

企业代理、SSL 检查设备有时会 切断长连接。表现为仅特定网络环境失败,可换网络或用 curl -N 对比 SSE 行为。


6. 排查顺序

  1. 浏览器开发者工具 → Network,看 WS/SSE 是否 101/200、是否 pending;
  2. 绕过反向代理直连后端端口对比;
  3. 查 Nginx error.log 中的 upstream 超时;
  4. 核对 VSS WS/SSE 端口与 .env 映射。

长连接类问题 大多数在代理超时与缓冲,少数在证书与跨域;先检查链路再检查业务代码。