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

Почему AWS classic ELB с протоколом HTTP не работает с веб-сокетами?

Я знаю, что есть опция ALB и NLB, которая работает с веб-сокетами. Я не могу понять, почему классический ELB с протоколом HTTP не работает с подключениями через веб-сокеты, хотя в данном случае есть Nginx, который настроен на добавление заголовков подключения и обновления. Как только я переключаю его на протокол TCP, он работает. Можете ли вы объяснить, как именно работает этот протокол, когда в середине стоит HTTP-прокси?

Он по-прежнему использует тот же TCP, как только клиент достиг сервера и Nginx добавил заголовки обновления, ответ сервера с сообщением протокола переключения должен достигнуть клиента, а затем они просто используют TCP установленного HTTP-соединения. По какой причине он сбрасывает это соединение на ELB, буферизацию ответа или просто отбрасывает весь не HTTP-трафик?

Итак, Nginx отправляет в ELB

 HTTP/1.1 101 Switching Protocols
Server: nginx/1.13.1
Date: Sat, 21 Mar 2020 07:53:38 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: PozdkhgL/Zdkgh3kwu0KkACFCt0=

Но ELB никогда не доставляет его обратно клиенту, и время ожидания запроса истекло.

Классический ELB не поддерживает веб-сокеты. AWS не публикует, почему этого не происходит. Из диаграммы в приведенной ниже ссылке, как вы указали, конкретно указывается, что ALB и NLB поддерживают веб-сокеты. Почему Classic их не поддерживает, не раскрывается.

Итог, если вы хотите использовать ELB с Websockets, используйте ALB или ELB

Ссылки

Функции эластичной балансировки нагрузки

Я не знаю, почему ELB не поддерживает веб-сокеты. Но если продавец говорит, что они не поддерживают это, вы должны просто придерживаться этого.

Эй это их Платформа.