2016-12-22 3 views
1

ALB/Node.js/socket.io 솔루션이 가장 단순한 형태로 작동하려고하며 핸드 셰이크가 끊어진 문제가 발생합니다. 현재로서는 대상 그룹의 노드 하나만을 의도적으로 사용하여 노드 전환 및 세션 고정과 관련된 변수를 제거하고 있습니다.Socket.io를 사용할 때 AWS ALB가 끊어지는 이유

NAT 인스턴스를 통해 노드에 직접 연결할 때 정상적으로 작동합니다. 연결 해제는 ALB를 통과 할 때만 발생합니다. 여기

내가 설정 한 것입니다 :

  • ALB 리스너 HTTP 80 -> 8081 (더 SSL 없음)
  • 2 AZS, 모두 (ALBs에 필요한) 인터넷 경로와
  • 기본 패턴 (거기에 내 하나 개의 노드) socket.io 대상 그룹에 /socket.io/*에 대한 AZS
  • 경로 패턴 중 하나에 하나 개 socket.io EC2 노드는 또한 socket.io 대상 그룹
  • 입니다
  • 은 찰기가 (하나 개의 노드에 대한 필요가 없습니다 만, 어쨌든 그것을했다) 사용
  • 여기

내가 socket.io 노드 클라이언트에서 볼 것입니다 : 여기

Thu, 22 Dec 2016 20:59:26 GMT socket.io-client:manager opening ws://52.72.198.58 
Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket creating transport "websocket" 
Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket setting transport websocket 
Thu, 22 Dec 2016 20:59:26 GMT socket.io-client:manager connect attempt will timeout after 20000 
Thu, 22 Dec 2016 20:59:26 GMT engine.io-client:socket socket close with reason: "transport close" 

그리고 난에 표시되는 내용입니다 socket.io 노드 서버 : 없음 전송 닫히고와

Thu, 22 Dec 2016 20:59:26 GMT socket.io:socket joined room U_qmSv_7gvP_JOFsAAAL 
Thu, 22 Dec 2016 20:59:26 GMT socket.io:client client close with reason transport close 
Thu, 22 Dec 2016 20:59:26 GMT socket.io:socket closing socket - reason transport close 

나도 같은 socket.io EC2 노드에 내 NAT를 통해 이동, 모든 작동합니다.

어떻게 든 ALB는 성공적인 핸드 셰이크 중에 즉시 연결을 닫고 있습니다.

NAT를 통해 작동하므로 socket.io 노드와 클라이언트가 괜찮다고 생각합니다. 그리고 노드에서 DEBUG 항목을 보았으므로 ALB가 socket.io 노드에 도달 할 수 있음을 알았습니다. 그리고 하나의 socket.io 노드 만 있기 때문에 세션과 끈적 거리는 문제는 없어야합니다.

ALB를 사용할 때 즉각적인 연결 해제에 기여할 수있는 것은 무엇입니까?

EDIT : ELB에 요청하는 socket.io 클라이언트가 EC2 노드에 있으면 작동하는 것으로 나타났습니다. 이는 클라이언트와 ELB 사이의 네트워크 경로에 무엇인가 의미합니다. 나는 아직 클라이언트가 EC2에있을 때와 다른 경우를 찾아야한다. 그것은 ELB를 통하지 않고 NAT를 통해 어디에서나 작동합니다.

+0

node.js 앞에 다른 역방향 프록시가 있습니까? nginx처럼?이 문제는 nginx 때문에 socket.io 연결이 시간 초과되는 EB를 사용하여 발생했습니다 ... – mkhanoyan

+0

경로에 다른 구성 요소가 없습니다. ec2에 알바로 연결하는 노드 클라이언트. 그리고 즉시 연결이 끊어졌습니다 ... 시간 제한이 없습니다. –

+0

HTTP 대신 80에서 TCP 연결을 수신하려고 했습니까? – mkhanoyan

답변

1

많은 시행 착오 끝에 ALB/ELB가 듣고있는 포트의 경우 특정 포트 범위 (80-83)로 인한 것인지 확인할 수있었습니다. 핸드 셰이크의 HTTP 부분이 작동하는 동안 두 번째 TCP 업그레이드 단계가 끊어집니다.

이 포트 범위와 관련된 VPC에는 제한이 없으므로 문제는 내 클라이언트와 ELB 간의 네트워크에 있습니다.

결론적으로이 문제는 AWS에서 아무 것도 아니며 리소스를 어떻게 설정했는지 AWS 외부에 있습니다. 정확한 원인을 찾으면이 대답에 대한 의견을 게시 할 것입니다.

+0

문제를 찾았습니까? –