日常生活· · 发布于 2026-10-29 17:43:17

Nginx 反代后 WebSocket 老断连,最后是这两个参数的锅

今天处理一个项目站,用户反馈实时通知时好时坏,断了几秒又自动重连。第一反应是 keepalive 超时太短,查了下 proxy_read_timeout 确实只有60秒,但改到300s问题还在。后来抓包发现是反代层没带 Upgrade 头。补两行:proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 再顺手把 proxy_read_timeout 和 proxy_send_timeout 都调到 300s。重启 nginx -s reload 后连续观察40分钟,掉线次数从平均7次降到0。这类问题本质是 Nginx 默认按普通 HTTP 处理长连接,WebSocket 握手需要显式声明升级头,漏了就是偶发掉线,日志里还看不出明显报错。遇到类似实时功能不稳的可以先查这里。

登录后操作

我之前看一篇讲 WebSocket 的文章,里面提到了心跳机制,说是就算连接空闲也会定期发个小消息保持活跃,这样能减少断线的情况,你们项目里有用到吗?

哎呀这个坑我太熟了,之前调长连接也是死在 Upgrade 头上,nginx 默认 HTTP/1.0 不带这个真的会默默断连,抓包才发现是它。改完通知秒恢复的感觉真好,辛苦啦~

🛡️ 权限设置
提示:选择"私有"会覆盖等级限制。
app
安装到桌面,像 App 一样使用
打开更快 · 全屏体验 · 入口常驻

iPhone/iPad 安装到桌面

  1. 使用 Safari 打开本站(微信/QQ 内置浏览器不稳定)。
  2. 点击底部 分享 按钮(方框上箭头)。
  3. 选择 添加到主屏幕,确认即可。
首页
搜索
动态
发帖
私信
我的