浏览器经Apache HTTP服务器调用WebSocket到后端服务的TCP连接总数是多少
WebSocket经Apache反向代理的TCP连接问题解答
核心结论
默认使用mod_proxy_wstunnel做WebSocket转发的场景下,总计会创建2个完全独立的TCP连接,浏览器到Apache、Apache到后端服务各占一个。
连接拆分说明
- 浏览器 ↔ Apache 段TCP连接:浏览器发起WebSocket握手时率先建立该连接,基于该连接发送带
Upgrade: websocket头的HTTP升级请求,握手完成后连接保持长活,所有浏览器侧的WebSocket帧都通过该连接传输。 - Apache ↔ 后端Web服务 段TCP连接:Apache校验完浏览器的握手请求后,会以客户端身份和目标后端服务建立独立的TCP连接,转发升级请求,收到后端返回的
101 Switching Protocols响应后,该连接也进入长活状态。后续Apache会在两段连接之间做双向的帧透传,两段连接的TCP超时、丢包重传逻辑完全独立,互不影响。
特殊场景说明
仅当你将Apache配置为四层透明TCP代理(而非七层WebSocket反向代理)的特殊场景下,才会实现浏览器到后端的端到端单TCP连接,但该配置需要额外调整系统iptables规则,不属于WebSocket代理的常规方案,生产环境几乎不会使用。
标准WebSocket代理配置参考
# 启用依赖模块 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so # 转发规则配置 ProxyPass "/ws" "ws://192.168.1.100:8080/ws" ProxyPassReverse "/ws" "ws://192.168.1.100:8080/ws"
内容的提问来源于stack exchange,提问作者Shashank
相关产品推荐
相关产品推荐

