CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
WebSocket 实时通信/课时/Nginx 反代升级
RawBlame
课时目录12 节

WebSocket 实时通信

  1. 01WebSocket 是什么
  2. 02协议与握手
  3. 03Spring WebSocket
  4. 04STOMP 消息
  5. 05浏览器客户端
  6. 06Next.js 与 WebSocket
  7. 07鉴权与安全
  8. 08水平扩展
  9. 09SSE 对照
  10. 10Nginx 反代升级
  11. 11测试与调试
  12. 12综合练习

Nginx 反代升级

proxy_http_version 1.1、Upgrade 头。

25 分钟

Nginx 反代升级

WebSocket 握手是 HTTP,经 Nginx 反代时必须 HTTP/1.1 + Upgrade + Connection。CodeRoadMap 的 prod.conf.example 与 ngx-proxy 已含 HMR/WS 模板。

学习目标

  • 配置 /ws 到 Spring Boot 的 upgrade 头
  • 设置读超时避免长连接被误杀
  • 区分 platform 与 backend 的 WS 路径

最小配置

location /ws/ {
    proxy_pass http://coderoadmap_backend/ws/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host       $host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_read_timeout 3600s;
}

map 块(通常在 nginx.conf):

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

缺 Upgrade 时握手失败,浏览器报 Unexpected response code: 200。

与 REST 共用 upstream

location /api/ {
    proxy_pass http://coderoadmap_backend/;
    # 普通 HTTP,无需 Upgrade
}

location /ws/ {
    proxy_pass http://coderoadmap_backend/ws/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

/api 走 REST;/ws 走 WebSocket(ws-stomp 端点 /ws)。

超时与扩展

指令建议原因
proxy_read_timeout3600s+长连接空闲不被断
proxy_send_timeout3600s大消息广播
ip_hash多实例时见 ws-scale

Next.js dev HMR 的 / location 同样需要 Upgrade,勿与 /ws 混配错误 upstream。

练习

  • 对比 test.conf.example 与 prod.conf.example 的 WS 相关行
  • 用 curl 模拟 Upgrade,确认 101 来自 backend 而非 Nginx 404
  • 断网 60s 后连接是否仍存活(调 read_timeout)
  • 小结

    proxy_http_version 1.1 + Upgrade = WS 过 Nginx 的钥匙。 下一课测试与调试。

    加载本节练习…
    ← 上一课SSE 对照下一课 →测试与调试