Я работаю над веб-чатом, который запускает nodejs на порту 8080 для публикации и 4555 для подписки с использованием веб-сокета на стороне клиента (javascript). Когда я делаю это подключение напрямую к экземпляру ec2, оно работает как чудо, но в этом случае у меня не будет масштабируемости, а также мне придется открыть порт 443 для мира. Если я установлю соединение через Load Balancer, консоль chrome / firefox покажет этот вывод и не сможет подключиться:
WebSocket connection to 'wss://www.domain.com/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpected response code: 200
Это заголовки:
Request URL: wss://www.domain.com/socket.io/?EIO=3&transport=websocket
Request Method: GET
Status Code: 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-Type: text/html; charset=UTF-8
Date: Sat, 25 May 2019 13:52:55 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: nginx/1.12.2
Transfer-Encoding: chunked
X-Powered-By: PHP/5.6.40
Accept-Encoding: gzip, deflate, br
Accept-Language: pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: Upgrade
Cookie: PHPSESSID=nt35ln6ipvbkhflic3obfhd615; AWSALB=l1rePGzfT+/sXpFl0uWliWsb9/Cqdy7V/FjiHF8slLY2pRJ2IbN86SsQJ2UBQZBIfFk8iHKKuCBbe+lLrKcN6toxjiOVVJNxzL2Xaz7BC9aShLzOCTuxkRgmC9/I
Host: www.domain.com
Origin: https:/ /www.domain.com
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: fN1LLn8igDR5CadSE9UVIw==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
EIO: 3
transport: websocket
Javascript-клиент очень прост для тестирования:
var socket = io('https: //www.domain.com/chat',{'secure':true,transports: ['websocket', 'polling', 'flashsocket']});
В конфигурационных файлах nginx у меня есть местоположение / чат, передающий запрос на: 4555, и есть nodejs, работающий и слушающий.
Я потратил 2 дня на это, а затем решил нанять кого-то, кто мог бы сделать это, у меня было два парня, которые работали над этим, и они не могли быть в состоянии исправить.
Может кто-нибудь здесь показать мне путь?