У меня есть балансировщик нагрузки приложения aws с прослушивателем https на порту 9999, перенаправляющий группу на порт 9999 с экземпляром ec2 в качестве цели.
Если я запустил свой сервер websocket с именем хоста, настроенным для моего домена api.example.com
, затем, когда клиент пытается открыть соединение через веб-сокет, он получает:
Ошибка при рукопожатии WebSocket: неожиданный код ответа: 502
Однако, если я настрою свой сервер websocket с пустой строкой вместо домена, он подключается просто хорошо!
Это проблематично, потому что сервер, который я собираюсь запустить на этом экземпляре, автоматически запускает сервер websocket. ТОЛЬКО ЕСЛИ предоставляется конфигурация имени хоста websocket, поэтому пустая строка означает, что сервер websocket никогда не запустится! Я бы предпочел не взламывать библиотеку, чтобы обойти это условие. Поэтому мне интересно, почему в мире пустая строка работает, а имя домена - нет?
Я пробовал localhost, ip коробки и т. Д., Все приводит к 502, кроме пустой строки!
ALB не использует имя хоста для проверки работоспособности. Таким образом, если ваш сервер не поддерживает запросы без имен хостов, проверка работоспособности завершится неудачно, что приведет к ошибкам 5xx при доступе к ALB.
Если ваш сервер не поддерживает это, у вас есть два варианта:
Моя проблема была решена путем установки моего хоста сервера websocket на 0.0.0.0