要让nginx正确代理websocket长连接,关键在于upstream启用keepalive 32并放宽健康检查,location中配置proxy_http_version 1.1、proxy_set_header upgrade $http_upgrade、connection "upgrade"、proxy_buffering off及proxy_read_timeout 86400等参数,确保协议升级、连接复用与超时匹配。

要让 Nginx 正确代理 WebSocket 协议的长连接,关键不是加个 location 就完事,而是确保协议升级不被拦截、连接不被中断、后端连接能复用。核心配置分散在 upstream 和 location 两个部分,缺一不可。
upstream 块:启用连接池复用
WebSocket 是长生命周期 TCP 连接,不能每次请求都新建连接。必须在 upstream 中显式启用 keepalive:
- keepalive 32:每个后端保持最多 32 个空闲连接,降低握手开销
- 去掉或放宽 max_fails 和 fail_timeout(如设为
max_fails=3 fail_timeout=60s),避免因心跳间隔长被误判宕机 - 不要用
ip_hash或hash $remote_addr,除非业务强制要求粘性;轮询(默认)更利于负载均衡
location 块:透传协议升级头并禁用缓冲
仅定义 upstream 不起作用,实际代理行为由 location 控制。WebSocket 握手依赖两个逐跳头,Nginx 默认会丢弃,必须手动透传:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- proxy_http_version 1.1:HTTP/1.0 不支持 Upgrade,必须强制使用 1.1
-
proxy_set_header Upgrade $http_upgrade:原样转发客户端的
Upgrade: websocket -
proxy_set_header Connection "upgrade":注意是固定字符串
"upgrade",不是变量;Connection 是逐跳头,不可继承 - proxy_buffering off:禁用响应缓冲,防止 WebSocket 帧被暂存、延迟或粘包
超时设置:匹配后端心跳周期
WebSocket 空闲时无数据流,Nginx 默认 60 秒超时会主动断连。需按后端实际心跳策略延长:
- proxy_read_timeout 86400(24 小时):适用于后端每 30–45 秒发一次 ping 的场景
- proxy_send_timeout 86400:保障服务端广播、通知等消息能顺利发出
- proxy_connect_timeout 10:连接建立阶段超时,5–10 秒足够
HTTPS(WSS)场景额外注意
浏览器强制 wss 时,Nginx 必须终止 SSL,并确保:
- 443 server 块已正确加载证书(PEM/KEY)
- location 中仍需完整设置上述 Upgrade/Connection 头
- 前端连接地址必须用全域名(如
wss://api.example.com/ws),不能用 IP 或端口直连 - Origin 校验若开启,需透传
proxy_set_header Origin $http_origin并确保匹配










