如何配置GCP负载均衡直接转发WebSocket流量至后端服务器
直接用GCP负载均衡转发WebSocket流量到后端服务器的配置步骤
我之前刚完成过类似的架构调整,其实GCP的HTTP(S)负载均衡原生就支持WebSocket协议,不需要额外开启特殊开关——因为WebSocket是基于HTTP握手升级的,只要后端服务器能正确处理Upgrade请求头,就能直接通过LB转发流量。下面是具体的配置步骤:
1. 确认后端WebSocket服务器的准备工作
- 确保你的WebSocket服务器监听了指定端口(比如
8080,或者直接用80/443),并且能正确响应WebSocket握手请求(识别Upgrade: websocket和Connection: Upgrade头)。 - 检查服务器的防火墙规则:允许来自GCP负载均衡的流量(可以先临时放开
0.0.0.0/0到对应端口,后续再根据GCP LB的IP段做更严格的限制)。
2. 创建/更新后端服务
登录GCP控制台,找到负载均衡 -> 后端服务:
- 如果是新建后端服务:选择你的WebSocket服务器所在的实例组(或实例模板),设置端口映射——把负载均衡的前端端口(比如
443)映射到后端服务器的WebSocket监听端口(比如8080)。 - 如果是已有后端服务:编辑服务,添加或调整端口映射,确保指向正确的后端端口。
- 这里不需要额外配置WebSocket相关的参数,GCP LB会自动处理HTTP升级请求。
3. 配置前端转发规则
- 进入负载均衡 -> 转发规则,创建或更新规则:
- 选择HTTP(S)负载均衡类型(如果用加密的
wss://就选HTTPS)。 - 绑定对应的SSL证书(如果是HTTPS,用GCP托管证书或自定义上传的证书)。
- 前端端口设置为对外暴露的WebSocket端口:
443(对应wss://)或80(对应ws://)。 - 目标指向你刚才配置的后端服务。
- 选择HTTP(S)负载均衡类型(如果用加密的
4. 配置健康检查
因为WebSocket基于HTTP,所以用普通的HTTP健康检查即可:
- 在后端服务的健康检查设置里,创建一个HTTP健康检查,指定后端服务器的健康检查路径(比如
/health)和端口,确保后端能返回200 OK。 - 健康检查是LB判断后端是否可用的关键,一定要配置正确,否则LB不会把流量转发到异常的实例。
5. 验证配置
用wscat工具快速测试连接:
wscat -c wss://your-lb-domain-name.com
如果能成功建立连接并收发消息,说明配置生效了。也可以查看GCP负载均衡的日志,确认流量直接转发到了后端WebSocket服务器,没有经过Nginx。
常见注意事项
- 如果用自定义端口(非80/443),要确保前端转发规则的端口和后端服务的端口映射一致,同时后端防火墙开放该端口。
- 对于HTTPS的
wss://,务必确保SSL证书有效且绑定正确,否则浏览器会拒绝连接。 - 如果后端服务器在VPC内,要确保VPC的防火墙规则允许LB的健康检查IP和转发流量进入。
内容的提问来源于stack exchange,提问作者Bharanitharan




