Назад | Перейти на главную страницу

Не удается получить соединение с веб-сокетом, работающее с балансировщиком нагрузки приложений ec2 +

У меня есть балансировщик нагрузки приложения aws с прослушивателем https на порту 9999, перенаправляющий группу на порт 9999 с экземпляром ec2 в качестве цели.

Если я запустил свой сервер websocket с именем хоста, настроенным для моего домена api.example.com, затем, когда клиент пытается открыть соединение через веб-сокет, он получает:

Ошибка при рукопожатии WebSocket: неожиданный код ответа: 502

Однако, если я настрою свой сервер websocket с пустой строкой вместо домена, он подключается просто хорошо!

Это проблематично, потому что сервер, который я собираюсь запустить на этом экземпляре, автоматически запускает сервер websocket. ТОЛЬКО ЕСЛИ предоставляется конфигурация имени хоста websocket, поэтому пустая строка означает, что сервер websocket никогда не запустится! Я бы предпочел не взламывать библиотеку, чтобы обойти это условие. Поэтому мне интересно, почему в мире пустая строка работает, а имя домена - нет?

Я пробовал localhost, ip коробки и т. Д., Все приводит к 502, кроме пустой строки!

ALB не использует имя хоста для проверки работоспособности. Таким образом, если ваш сервер не поддерживает запросы без имен хостов, проверка работоспособности завершится неудачно, что приведет к ошибкам 5xx при доступе к ALB.

  • Проверьте целевую группу, которую использует ALB, на наличие ошибок проверки работоспособности
  • Проверьте журналы сервера приложений на наличие ошибок, связанных с проверкой работоспособности

Если ваш сервер не поддерживает это, у вас есть два варианта:

  • Используйте прокси (например, nginx) на своем сервере, который может обрабатывать запросы без имени хоста, и решать проблему там.
  • Переопределите порт проверки работоспособности ALB, перенаправив его на то, что все время возвращает HTTP 200 (например, Apache, работающий на том же хосте, но на другом порту).

Моя проблема была решена путем установки моего хоста сервера websocket на 0.0.0.0