发布时间: 2026年10月15日更新时间: 2026年10月15日

Nginx WebSocket 代理握手失败怎么办:Upgrade、Connection 与超时配置

Nginx WebSocket 握手失败时,按客户端请求头、Nginx upgrade 映射、上游地址和超时顺序排查,并记录状态码与断开时间。

WebSocket 握手失败先检查客户端请求头、Nginx upgrade 映射和上游地址,不要先更换代理 IP。返回 101 只表示握手升级成功,不代表长连接稳定。

如何检查客户端请求头和 Nginx 转发配置

确认客户端发送 Upgrade: websocket 和 Connection: Upgrade。核对 location 路径、proxy_pass 上游地址以及 HTTP/1.1 与 upgrade 映射;具体配置应结合现有站点配置和当前 Nginx 文档核实。

通用代理参数可先参考代理参数说明,再结合现有 Nginx 配置核对。

修改后先运行 nginx -t,通过后再 reload。用同一客户端记录握手状态、请求路径和请求 ID;返回 101 后继续观察首个数据帧与关闭时间。

握手成功但连接空闲断开时,区分应用未发送数据和中间层超时;不要把 101 当成长连接状态的唯一标准。

下面按状态码和断开时间定位客户端、Nginx 或上游问题。

状态/现象优先检查日志位置处理动作
400Upgrade/Connection 请求头access log修正客户端握手
404URL、location 路径access log修正路由映射
502upstream 地址和状态error log、上游日志修复上游连通性
101 后断开上游协议、心跳Nginx 与上游日志查关闭原因
空闲断开read timeout、心跳两端日志调整对应超时

使用请求 ID 对齐两端日志,确认故障后再修改对应配置。

修改 Nginx 配置后如何验证 WebSocket 连接

确认客户端发送 Upgrade: websocket 和 Connection: Upgrade,再核对 location、proxy_pass、HTTP/1.1 和 upgrade 映射。修改后先运行 nginx -t,通过后 reload;用同一请求记录状态码、请求 ID、首个数据帧和关闭时间。

400、404、502 和 101 后断开怎么排查

400 查客户端头,404 查 URL 与 location,502 查 upstream 和端口,101 后断开查上游关闭原因、协议和心跳,固定时间断开查 read timeout。101 只证明握手升级,不证明长连接稳定。

跨层故障可参考代理 IP 故障排查中心分辨客户端、代理和上游问题。

修改配置后先验证 Nginx 语法

配置关系应同时满足 HTTP/1.1、Upgrade 映射和正确 upstream;改动后先运行 nginx -t,再 reload,最后用客户端确认返回 101 Switching Protocols。日志至少记录请求 ID、状态码、upstream 地址、握手耗时和断开时间;101 只证明升级完成,后续断开仍需查空闲超时和上游日志。具体 location 片段按项目配置和当前 Nginx 文档复核。

如果握手之外还出现延迟或不稳定,可补充参考代理 IP 可用率、延迟和稳定性怎么测试。

FAQ

修改配置后如何确认已加载?

先执行 nginx -t,通过后 reload,再用握手请求和日志确认新配置生效。

客户端没有发送 Upgrade 请求头时需要改 Nginx 吗?

先检查客户端是否按 WebSocket 方式发起握手。Nginx 配置不能代替客户端发起 Upgrade 请求。

400、404 和 502 分别先查什么?

400 检查请求头和协议;404 检查 URL 与 location;502 检查 upstream、端口和上游服务状态。

返回 101 后连接仍然断开怎么办?

对照上游关闭日志、心跳和 proxy_read_timeout,判断是上游主动关闭还是空闲超时。101 只表示握手升级成功。