我在Google Cloud Platform计算引擎的VM上安装了一个websocket java应用程序。如果请求通过google负载均衡器,则websocket会自动关闭,但是如果我使用IP访问,它将可以正常工作。我已经将后端服务超时增加到86400秒,但是它不能解决任何线索吗?
location /openWebSocket {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 7d;
proxy_send_timeout 7d;
keepalive_timeout 7d;
}
下面是nginx access.log信息
[21/Jan/2019:21:16:57 +0000] "GET /openWebSocket HTTP/1.1"
101 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
[21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-"
"GoogleHC/1.0"
[21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-"
"GoogleHC/1.0"
[21/Jan/2019:21:17:00 +0000] "GET / HTTP/1.1" 200 612 "-"
"GoogleHC/1.0"
答案 0 :(得分:0)
根据documentation,GCP负载平衡器本机支持websocket,只要满足以下条件,就可以充当代理:
我将在GCP负载平衡器日志或Java应用程序日志中检查websocket握手期间是否存在错误。我会寻找类似于this
的错误如果是这样,我建议您检查Websocket升级响应的代码处理。
希望有帮助。
答案 1 :(得分:0)
增加后端的超时值通常可以解决这些类型的问题。
您也可以查看目前仍处于测试阶段的Session Affinity。
答案 2 :(得分:0)
谢谢大家的投入和指导。
发送心跳消息可以解决此问题。