У нас есть проект GCE с несколькими серверами за балансировщиком нагрузки. На серверах работает HTTPS-сервер NodeJS. Недавно мы попытались реализовать поддержку веб-сокетов, но не можем подключиться к нему из-за балансировщика нагрузки. Как только заголовок обновления отправляется на сервер для запуска веб-сокета, он закрывает соединение с ошибкой 400.
В журналах балансировщика нагрузки мы видим следующее:
@type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
statusDetails: "upgrade_header_rejected"
Кажется, что соединение не проходит с нашими внутренними серверами. Кто-нибудь знает, как это решить?
WebSocket изначально поддерживается балансировщиками нагрузки HTTP(s) в GCP. Если вы используете этот балансировщик нагрузки и получаете сообщение «upgrade_header_rejected», вероятно, это связано с тем, что серверная часть отклонила соединение. Также возможно, что клиент пытался перейти с безопасного соединения на небезопасное или что заголовок является недопустимым.