nginx websocket 代理的核心是稳定透传而非加速,关键配置包括:强制 http/1.1、透传 upgrade 头、设置 connection upgrade、关闭缓冲与缓存、合理设置超时(如 proxy_read_timeout 86400)、https 下正确终结 ssl 并避免拦截握手。

WebSocket 代理本身不“加速”数据流,Nginx 的作用是稳定、低延迟地透传连接,避免因默认配置导致的中断、缓冲或降级。所谓“实时数据流加速”,本质是消除阻碍长连接和帧传输的配置瓶颈,让后端 WebSocket 服务的能力完整释放。
关键配置必须到位
缺一不可,否则握手失败或连接秒断:
-
强制 HTTP/1.1:WebSocket 升级依赖 HTTP/1.1,需显式设置
proxy_http_version 1.1 -
透传 Upgrade 头:用
proxy_set_header Upgrade $http_upgrade把客户端的Upgrade: websocket原样转发 -
声明 Connection 升级:设
proxy_set_header Connection "upgrade",不能写成"keep-alive, upgrade"或漏引号
禁用缓冲与缓存
WebSocket 是流式帧通信,Nginx 默认启用的缓冲机制会攒包、延迟发送,甚至截断大帧:
- 必须关闭代理缓冲:
proxy_buffering off - 禁用缓存:
proxy_cache off(即使没开 cache,显式关闭更稳妥) - 关闭重定向:
proxy_redirect off,防止 301/302 中断握手
超时设置要真正“长”
默认 60 秒的 proxy_read_timeout 会主动断开空闲连接——而监控看板、聊天室等场景中,可能数分钟无数据但连接必须存活:
-
proxy_read_timeout 86400(24 小时)适合多数业务 -
proxy_send_timeout 86400防止后端发包间隔稍长就被切断 - 不建议设为 0(无限),可能掩盖后端异常;86400 是兼顾稳定性与资源回收的合理值
HTTPS/WSS 场景下别踩坑
前端用 wss://,Nginx 必须终结 SSL,且证书有效:
- 监听 443 端口并启用
ssl,配置正确证书链 - 后端可走内网 HTTP(如
http://127.0.0.1:8080),无需再套 HTTPS - 确保
X-Forwarded-Proto设为$scheme,方便后端识别安全上下文 - 不要在该 location 下配
return 404或deny all,否则直接拦截握手请求











