2014-10-23 2 views
0

방금 ​​토네이도 웹 서버를 실행하는 몇 대의 Google Compute Engine 인스턴스를 가리키는 HTTP로드 밸런서를 추가했습니다. 특히 그들은 웹 소켓을 처리하고 있습니다. 나는 (크롬) 부하 분산을 통해 내장 웹 소켓으로 페이지를 방문 할 때Google HTTP로드 밸런서 웹 소켓 연결을 업그레이드 할 수 없습니다.

내가 얻을 :이 부하 분산 장치의 IP 타격뿐만 아니라 DNS 통해

Error during WebSocket handshake: Unexpected response code: 400 

.

그러나 개별 인스턴스를 공격하면 websocket을 성공적으로 핸드 셰이크 할 수 있습니다.

로드 밸런서를 통해 페이지를 가져올 때 웹 서버에 400 개의 로그가 표시되지 않으며로드 밸런서가이를 통과시키지 않는로드 밸런서임을 나타냅니다.

HTTP '업그레이드'를 허용 할 수있는 방법이 있습니까? 또는 Cloud Platform HTTP로드 밸런서에서 불가능합니다.

EDIT : 'Network Load Balancer'를 통해 websocket을 핸드 셰이크 할 수 있으므로 모든 신호가 HTTP로드 밸런서를 가리키고 있습니다.

답변

0

LB에 건강한 인스턴스가 있습니까? 이 경우 tcpdump를 수행하여 인스턴스가 LB 뒤에서 직접 회신하는 방식을 확인할 수 있습니다. LB의 IP 뒤에있는 응답이 인스턴스 IP의 공개 IP가 아닌 개인 IP가 아닌지 확인하십시오.

비정상적인 경우 인스턴스를 다시 확인하고 매번 TCP 연결이 제대로 닫혀 있는지 확인해야합니다.

1

HTTP 또는 HTTPS 대신 TCP 또는 SSL을 사용하도록로드 밸런서를 설정하십시오. AWS로드 밸런서에서 동일한 문제가 발생하여 스위치가 문제를 해결하는 것처럼 보였습니다. HTTP 설정이 websocket에 필요한 일부 패킷을 필터링하고있는 것으로 의심됩니다.

5

현재 (2015 년 7 월 현재) GCP의 HTTP LB 및 AWS의 ELB는 웹 소켓을 지원하지 않습니다.

GCP의 해결 방법은 네트워크 부하 분산 장치 (https://cloud.google.com/compute/docs/load-balancing/network/)를 사용하는 것입니다.

ELB의 해결 방법은 HTTP/HTTPS 대신 TCP/SSL을 사용하는 것입니다.

관련 문제