alb的http/https监听默认支持websocket,无需额外开启;ws://走http监听,wss://需https监听并绑定有效证书,关键要调大连接空闲超时、配置正确健康检查路径及响应码。

阿里云 SLB(现统一为 ALB/CLB)本身不提供独立的 WS 协议选项——它不识别、也不需要你手动“开启 WS 协议”。WebSocket 连接能否走通,取决于监听类型、后端协议兼容性、以及连接生命周期管理是否被意外中断。直接结论:用 HTTP 监听就能跑 WS,用 HTTPS 监听就能跑 WSS,不需要额外勾选“WebSocket”开关。
ALB 的 HTTP/HTTPS 监听默认支持 WebSocket 升级
ALB 是七层负载均衡,原生解析 HTTP 请求头。只要客户端发起标准的 WebSocket 握手(含 Connection: Upgrade、Upgrade: websocket、Sec-WebSocket-Key),ALB 就会透传该请求到后端,不会拦截或拒绝。这不是“功能开关”,而是协议兼容性的自然结果。
- HTTP 监听(端口 80)自动支持未加密 WebSocket(
ws://) - HTTPS 监听(端口 443)自动支持加密 WebSocket(
wss://),前提是已绑定有效服务器证书 - ALB 不要求你在控制台勾选“启用 WebSocket”,也不存在该配置项
- 如果你看到“WebSocket 不通”,问题几乎一定出在后端服务、健康检查或连接超时设置上,而非监听协议本身
CLB 上用 TCP 监听跑 WebSocket 的风险点
CLB(传统型负载均衡)不解析 HTTP 层,所以无法识别 WebSocket 握手。若强行用 TCP 监听(如前端 80 → 后端 8080),虽然 TCP 连接能建通,但会丢失关键行为保障:
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
- 健康检查只能做 TCP 端口连通性检测,无法验证后端 WebSocket 服务是否真正可握手(比如
/health返回 200,但/ws已崩溃) - ALB 的连接空闲超时(默认 15 秒)对 WebSocket 无效;而 CLB 的 TCP 空闲超时(默认 900 秒)可能被中间网络设备(如 NAT 网关、防火墙)提前 kill 掉长连接
- 没有 HTTP 层重试、Header 透传、路径路由等能力,后续扩展困难
- 官方文档明确建议:WebSocket 场景优先选用 ALB,而非 CLB + TCP
必须调的关键参数:连接空闲超时与健康检查路径
WebSocket 是长连接,ALB 默认的 连接空闲超时时间(15 秒)会直接断开静默的 ws 连接。必须延长,且要满足链路各环节的最小值约束:
- 在 ALB 监听高级配置中,将
连接空闲超时时间改为 ≥ 60 秒(常见设为 300 秒) - 后端服务(如 Node.js 的
ws库、Spring Boot 的WebSocketHandler)也要同步设置自身心跳和超时,通常需 ≤ ALB 值 - 健康检查请求路径不能写成
GET /,而应指向一个真实返回101 Switching Protocols或至少能触发 WebSocket 握手逻辑的 endpoint(例如GET /ws/health),否则健康检查永远失败 - 健康检查响应码必须匹配配置的
HealthCheckExp(如设为101),ALB 才认为后端“活”着
WSS 场景下证书与 TLS 策略的硬性要求
wss:// 不是加个 HTTPS 监听就自动生效的。ALB 要求:
- 必须在证书中心上传并绑定有效的服务器证书(PEM 格式,含私钥 + 证书链)
- 监听配置中 TLS 安全策略不能选太旧的(如
TLS_SSLv3),推荐TLS_AES_128_GCM_SHA256或更高 - 如果后端服务也启用了 TLS(即端到端加密),注意 ALB 回源协议要选
HTTPS,且后端必须监听 443 并有对应证书;否则回源失败,wss握手卡在 ALB → 后端阶段 - 浏览器访问
wss://时若报ERR_CONNECTION_CLOSED,大概率是 ALB 证书未生效、或后端拒绝了 ALB 的回源 HTTPS 请求
最容易被忽略的是:ALB 对 WebSocket 连接不做主动探活,它只信任健康检查结果。一旦后端进程假死(TCP 端口通,但不再响应 WebSocket 握手),ALB 仍会持续转发请求,直到连接超时或客户端重连。务必在后端实现带业务语义的健康检查接口,并让 ALB 定期调用它。










