AWS Elastic Beanstalk с ALB: истекло время ожидания узла Websocket - PullRequest
0 голосов
/ 06 февраля 2019

Я прочитал несколько постов в блоге и следовал их инструкциям о том, как заставить Node Websockets работать с AWS Elastic Beanstalk (EB) с помощью Application Load Balancer (ALB) - безрезультатно.

Приложение работает правильнос веб-сокетами при локальном использовании (localhost).

В EB приложение загружается правильно и отображается в браузере, но Websocket не подключается и в конечном итоге истекает время.

WebSocket connection to 'ws://tradey-12-hr-dev.ap-northeast-1.elasticbeanstalk.com:3030/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

В соответствии с сообщениями в блоге я сделал следующее добавлениев мое приложение в .ebextensions/enable-websockets.config:

container_commands:
  enable_websockets:
    command: |
      sed -i '/\s*proxy_set_header\s*Connection/c \
              proxy_set_header Upgrade $http_upgrade;\
              proxy_set_header Connection "upgrade";\
              ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf

Вот внутренний код, который устанавливает websocket.Используемый порт 3030 в BE и FE.

import WebSocket from 'ws'

const setUpWebsocketServer = port => new WebSocket.Server({ port })

export default setUpWebsocketServer

Вот код переднего конца, который инициирует рукопожатие:

const target = window.location.host === 'localhost:3000' ? 
  'localhost' : window.location.host

const ws = new WebSocket(`ws://${target}:${PORT}`)

Вот ссылка на последние 100 строкжурналов.Ошибки не генерируются:

https://gist.github.com/bengrunfeld/e2f46e3575a3f57a68ed3c39fd63e7d8

Я надеюсь, что это что-то маленькое, и моя интуиция говорит мне, что я должен разрешить трафик на порт 3030 через группы безопасностиили что-то еще - я даже создал новые правила для входящего трафика во всех группах безопасности, разрешающих трафик из «Anywhere», но это также не сработало (см. прикрепленное изображение).

Заранее спасибо за помощь =)

AWS EC2 Security Group Inbound Rules* * 1033

1 Ответ

0 голосов
/ 06 февраля 2019

Я понял это.ALB поддерживает только HTTP, а не TCP.Настоящие веб-сокеты (например, библиотека npm ws) работают по протоколу TCP, поэтому они не будут работать с ALB.Либо вы можете использовать настоящие Websockets с ELB или библиотеку, которая использует Long Polling, например Socket.io с ALB.Я написал полный пост в блоге, который вы можете прочитать здесь: https://medium.com/@binyamin/node-websockets-with-aws-elastic-beanstalk-elastic-load-balancer-elb-or-application-load-6a693b21415a

...