2014-09-08 3 views
10

ELS를 통해 Amazon AWS EC2 인스턴스의 GlassFish가 제공하는 websocket에 ssl을 통해 어떻게 연결할 수 있습니까?WebSockets : ELB를 통해 클라이언트에서 Amazon AWS EC2 인스턴스로의 전환

저는 webSocket 구현으로 GlassFish 4.1 b13 시험판에서 Tyrus 1.8.1을 사용하고 있습니다.

포트 8080은 보안되지 않으며 포트 8181은 SSL로 보호됩니다.

  • ELB DNS 이름 : elb.xyz.com
  • EC2 DNS 이름 : ec2.xyz.com
  • 웹 소켓 경로 : 나는 모두를 성공적으로 WS &을 사용했다

/웹/소켓 wss : 내 ELB를 거치지 않고 직접 EC2 인스턴스에 연결합니다. 즉, 다음과 같은 URL을 모두 작동 :

  • WS를 : //ec2.xyz.com : 8080/웹/소켓
  • WSS : //ec2.xyz.com : 8181/웹/소켓

tcp 80> tcp 8080 수신기를 사용하여 내 ELB에서 ws (non-ssl)를 성공적으로 사용했습니다. 즉, 다음과 같은 URL이 작동합니다

  • WS : //elb.xyz.com : 80/웹/소켓 I는, 그러나, 비록 WSS 사용하는 방법을 찾을 수 없어

을 내 ELB.

나는 많은 것을 시도했다.

  • WSS :

    나는 나의 ELB를 통해 작동하도록 WSS를 얻을 수있는 가능성이 가장 높은 방법은 다음 URL을 활성화 프록시 프로토콜 내 ELB에 TCP 8181> TCP 8181 리스너를 생성하고 사용하는 것입니다 가정 : //elb.xyz.com : 8181/web/socket

불행히도, 작동하지 않습니다. 글래스 피쉬에서 프록시 프로토콜을 사용해야 할 수도 있지만, 그렇게 할 수있는 방법을 찾지 못했습니다 (또는 가능한 경우 또는 내 ELB에서 작동하도록 wss에 필요한 경우).

또 다른 옵션은 ssl> tcp 8080 수신기를 사용하여 ELB에서 종료 된 ssl 연결을 통해 ws 또는 wss를 실행하고 glassfish에 보안을 유지하지 않을 수 있습니다. 그건 나에게도 도움이되지 못했지만 어쩌면 설정이 잘못되었을 수도 있습니다.

누구나 내 앞에서 설명한 두 가지 시도를 수정 한 사람이 있습니까? 아니면 다른 제안이 있습니까?

감사합니다.

답변

5

최근에 내 브라우저와 EC2 Node.js 인스턴스간에 wss가 활성화되었습니다. 고려해야 할 두 가지가했다 : ELB 리스너 탭에서

  • 는, 부하 분산 프로토콜로 SSL로 WSS 포트에 대한 행을 추가합니다.
  • ELB 설명 탭에서 더 높은 유휴 시간 제한 (연결 설정)을 설정합니다. 기본값은 60 초입니다. ELB가 1 분 후에 websocket 연결을 종료하고 유휴 시간 제한을 3600 (최대 값)으로 설정하면 훨씬 긴 통신이 가능합니다.

시간 초과가 여전히 있기 때문에 분명히 궁극적 인 해결책은 아니지만 일반적으로 우리가하는 일은 1 시간이면 충분할 것입니다.

희망이 도움

8

나는 비슷한 설정을 가지고 다음과 같이 원래 내 ELB 리스너 구성이 비록

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

웹 사이트 자체에 문제가 없으면 websocket 연결에 실패했습니다. 청취자에서는 WSS뿐만 아니라 통과 할 수 있도록 SSL 만 반대로 모든 보안 TCP 연결을 허용해야합니다

  • HTTP 80 HTTP 80
  • SSL (보안 TCP) 443 SSL (보안 TCP) 443

또한 ELB의 유휴 시간 초과를 높일 것을 권장합니다.

+0

나는 "HTTPS와 반대되는 것"을 의미했습니다. – guillaumepiot

+3

고맙습니다. HTTPS 대신 안전한 TCP가 트릭을했습니다! –

+0

"SSL (보안 TCP) 443 TCP 80"도 작동합니다. –