Falha na conexão do WebSocket: o handshake de abertura do WebSocket foi cancelado
Recentemente, configurei uma instância do EC2 (em uma VPC sem balanceador de carga) e reconhecidamente a configuração é um pouco estranha, mas é o que é necessário para o aplicativo Web que estamos executando.
O servidor da Web (em Haskell) está sendo executado na porta 4433 (as portas padrão são reservadas para uma instância do Apache) e está recebendo pacotes UDP sendo transmitidos de outro sistema. Eu tenho muitas das portas abertas (apenas durante o teste) como mostrado aqui (dos Grupos de Segurança):
Custom TCP Rule 4433 tcp 0.0.0.0/0 ✔
Custom TCP Rule 8080 tcp 0.0.0.0/0 ✔
SSH 22 tcp 0.0.0.0/0 ✔
HTTP 80 tcp 0.0.0.0/0 ✔
HTTPS 443 tcp 0.0.0.0/0 ✔
Custom UDP Rule 30090 udp 0.0.0.0/0 ✔
Custom UDP Rule 30089 udp 0.0.0.0/0 ✔
O JavaScript para o soquete TCP solicita a configuração do soquete nessa mesma porta (usando a URL atribuída ao IP público da AWS) e é aqui que a solicitação retorna o erro:
A conexão do WebSocket com 'wss: // [URL]: 4433 / projects / socket' falhou: o handshake de abertura do WebSocket foi cancelado.
Vincular o soquete a 0.0.0.0 resulta no mesmo erro.
Para iniciar o servidor da Web Haskell, tive que fazer referência aointerno IP fornecido pela AWS, pois não seria executado ao fazer referência aopúblico IP fornecido pelo serviço IP elástico. Pensando que é aqui que o problema surgiu, mudei meu pedido de soquete para este ...
wss://[internal ip]:4433/projects/socket
Isso altera o erro:
Falha na conexão do WebSocket com 'wss: // [IP interno]: 4433 / projects / socket': Erro no estabelecimento da conexão: net :: ERR_CONNECTION_REFUSED
Esse erro faz sentido para mim, pois o IP interno não está disponível para o mundo externo.
Tudo o que li nos websockets na AWS envolve um ELB (Elastic Load Balancer) e não preciso de um deles. Eu tentei todas as coisas em todas as respostas postadas no momento (algumas das perguntas ainda nem obtiveram respostas) no SO sem sucesso. Também configurei um caso de suporte com a Amazon (quase 24 horas atrás) que não recebeu uma resposta.
Informação adicionalNavegando parahttp://[URL]:4433/projects/socket
gera 'WebSocket Available', onde o URL é o que desejamos usar e o DNS público fornecido pela AWS.
Corridanetstat -plunt
revela o seguinte:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 [internal IP]:8080 0.0.0.0:* LISTEN -
tcp 0 0 [internal IP]:4433 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::443 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
udp 0 0 [internal IP]:30089 0.0.0.0:* -
udp 0 0 0.0.0.0:30090 0.0.0.0:* -
udp 0 0 0.0.0.0:11950 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp6 0 0 :::38450 :::* -
Alguém já teve um problema semelhante com os websockets na AWS? Se sim, como você resolveu o problema?