1006是客户端tcp连接被无声切断时自动生成的哑状态,根源在于代理层(如nginx)未正确配置websocket透传或心跳超时,需确保http/1.1、upgrade/connection头透传、读写超时设置合理,并匹配心跳节奏。

1006 不是服务端发的错误码,而是客户端在 TCP 连接被无声切断、未收到任何关闭帧时自动生成的“哑状态”。它不带原因、不触发 onerror、event.reason 几乎总为空——真正要解决的,不是前端报错本身,而是定位并阻止中间某层(最常见就是 Nginx)提前 RST 断连。
检查 Nginx 是否完整透传 WebSocket 升级协议
Nginx 默认把 WebSocket 当普通 HTTP 处理,漏掉任意一项配置,连接就会在 60 秒后静默断开,现象全是 Close Code 1006。必须同时满足以下四点:
-
启用 HTTP/1.1:
proxy_http_version 1.1;(HTTP/1.0 不支持长连接与 Upgrade) -
透传 Upgrade 头:
proxy_set_header Upgrade $http_upgrade;(注意是$http_upgrade,不是$upgrade或漏掉$) -
透传 Connection 头:
proxy_set_header Connection "upgrade";(引号不能少,值必须是小写"upgrade") -
禁用代理读写超时压制:
proxy_read_timeout 300;和proxy_send_timeout 300;(建议统一设为 300,即 5 分钟;必须 ≥ 心跳间隔 × 2,且不能只配一个)
验证心跳节奏是否匹配代理耐性
心跳不是“有就行”,而是要跑在代理容忍窗口之内。如果心跳每 30 秒一次,但 proxy_read_timeout 只设了 60 秒,第二次 pong 还没回来,Nginx 就已发 RST。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 服务端必须响应 PING 帧(RFC 6455 强制要求),不能忽略或延迟超过 10 秒
- 推荐双向心跳:客户端发 PING,服务端也主动发 PING,避免单向保活失效
- 心跳间隔建议 ≤ 45 秒(为 NAT、ALB、移动端回收等最短超时留出缓冲)
绕过代理直连快速定位问题源头
这是最快判断是否为 Nginx 问题的方法:
- 将前端 WebSocket URL 改为
ws://:(跳过域名和 Nginx) - 若直连稳定无 1006,而走域名访问必现 1006,则 99% 是代理配置问题
- 若直连也断,问题转向服务端(如 Node.js
http.Server默认 timeout)、网络设备(NAT/防火墙)或客户端(iOS 切后台回收)
警惕其他代理层的隐形超时
除了 Nginx,云网关常默默执行自己的断连策略:
- AWS ALB:空闲超时固定 60 秒且不可调,需改用 NLB,或把心跳压到 ≤ 25 秒
- Tencent Cloud CLB / 阿里云 SLB:部分版本默认 90 秒空闲超时,需在控制台显式调大
- 企业防火墙或运营商 NAT:超时可能低至 90–300 秒,无法配置时只能靠更激进的心跳+客户端前置检测兜底
不复杂但容易忽略:1006 的本质是“连接被掐了却没人打招呼”,解决核心就三点——让代理真正理解 WebSocket、让心跳节奏压住所有环节的超时底线、让前端在发消息前主动确认连接状态。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










