Я прочитал несколько постов в блоге и следовал их инструкциям о том, как заставить 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», но это также не сработало (см. прикрепленное изображение).
Заранее спасибо за помощь =)
* * 1033