You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Google Cloud应用负载均衡器建立WebSocket连接求助

Google Cloud全球外部应用负载均衡器WebSocket连接故障排查

环境设置

  • 一台VM实例运行两个服务:
    • 认证服务(Authentication Service):端口8080,可通过https://auth.forge-code.com访问。
    • 通知服务(Notification Service):端口8081,可通过https://notify.forge-code.com访问。
  • 通知服务暴露WebSocket端点/ws/*(例如wss://notify.forge-code.com/ws/546)。
  • 全球外部应用负载均衡器配置:
    • 前端(Frontend):
      • 协议:HTTPS
      • HTTP保持连接超时:1200秒
      • 已为auth.forge-code.com、notify.forge-code.com两个子域名配置SSL证书。
    • 路由规则(Routing Rules):
      • auth.forge-code.com所有流量路由至auth-backend。
      • notify.forge-code.com/ws/*流量路由至notify-backend。
      • notify.forge-code.com其他流量路由至notify-backend。
    • 后端(Backends):
      • auth-backend:
        • 端口:8080
        • 超时:30秒
      • notify-backend:
        • 端口:8081
        • 超时:30秒
        • 已启用Cloud CDN
        • 已启用日志(采样率:1)
  • DNS已正确将两个子域名解析至负载均衡器IP。

问题详情

  • https://notify.forge-code.com/health等HTTP请求完全正常。
  • wss://notify.forge-code.com/ws/546的WebSocket连接失败:
    • Postman返回502 Bad Gateway
    • 浏览器控制台偶尔出现socket hang up错误
  • 直接连接后端ws://34.133.145.146:8081/ws/546可成功建立WebSocket连接。

补充信息

  • 后端服务基于Rust的ntex框架实现,日志显示通过负载均衡器发起的WebSocket连接刚建立就被断开。
  • 怀疑问题出在后端到负载均衡器的回传流量环节,但不确定调试方向。

日志信息

后端日志片段

[INFO  ntex::web::middleware::logger] 35.191.206.16:41366 "GET /health HTTP/1.1" 200 47 "-" "GoogleHC/1.0" 0.000069
[INFO  notify_service::services::websocket_service] Client disconnected: 546
[INFO  notify_service::services::websocket_service] Connection dropped, stopping heartbeat task.

1. Postman连接wss://notify.forge-code.com/ws/546

  • 错误:502 Bad Gateway
  • 请求:
GET /ws/546 HTTP/1.1
Host: notify.forge-code.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: x14nFpQQ/RYw17KRaAYteA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  • 响应:
HTTP/1.1 502 Bad Gateway
Content-Length: 110
Content-Type: text/plain
Connection: close
Via: 1.1 google
Date: Wed, 18 Dec 2024 10:50:58 GMT
Alt-Svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000

2. 直接连接后端ws://34.133.145.146:8081/ws/546

  • 请求:
GET /ws/546 HTTP/1.1
Host: 34.133.145.146:8081
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: HBB28rJBqzubIZpcjX4IFQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  • 响应:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: BMDxeu6H/GzSXaTDwL4/gunqy1A=
Date: Wed, 18 Dec 2024 10:51:19 GMT

3. Postman连接ws://notify.forge-code.com/ws/546

  • 错误:socket hang up
  • 请求:
GET /ws/546 HTTP/1.1
Host: notify.forge-code.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: KgravwbL2GoTBZkgHj1uFQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  • 无响应

备注

  • 不存在400错误。
  • 已提供完整日志及握手详情。

问题

  1. 为何通过负载均衡器的WebSocket连接失败,但HTTP流量和直接连接后端的WebSocket连接正常?
  2. 如何解决该问题,使通过负载均衡器的WebSocket连接能够成功建立?

内容的提问来源于stack exchange,提问作者Shivank Anchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:52:02