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 adicional

Navegando 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?

questionAnswers(2)

yourAnswerToTheQuestion