Может ли сервер WebSocket сосуществовать с сервером HTTP Apache в том же порту publi c (80), но локально по другому адресу? - PullRequest
0 голосов
/ 26 февраля 2020

Во-первых, у меня есть HTTP-сервер с Apache 2.4 в Windows, прекрасно работающий с простым веб-сайтом, поэтому я перенаправил внешний порт 80 на локальный порт 80 моей Windows машины в моем маршрутизаторе.

И я хочу запустить сервер WebSocket на моем Raspberry PI для выполнения сумасшедших действий с python, и я попытался перенаправить внешний порт 80 также на локальный порт 80 Raspberry. И я попытался подключиться к серверу python WebSocket, работающему на моем Raspberry, с помощью сценария JS на веб-сайте, и он говорит: net :: ERR_CONNECTION_REFUSED.

Затем я заметил, что мой простой веб-сайт на моем Apache сервере загружался неправильно (очень медленно), большую часть времени он вообще не загружался, chrome сказал: Соединение отказано. Затем я отменил правило порта Raspberry, и тогда оно загрузилось совершенно нормально.

Итак, два упомянутых протокола не могут сосуществовать (возможно, так и есть)? или это просто проблема с переадресацией портов?

Заранее спасибо за ваше время

1 Ответ

0 голосов
/ 26 февраля 2020

Это ограничение маршрутизации. Когда вы используете переадресацию портов в маршрутизаторе, это происходит на транспортном уровне (4) модели OSI . Здесь сокет определяется 3 вещами: протокол, адрес, порт. Что в данном случае составляет tcp:<Your-IP-Address>:80. Вы можете переслать это только в одно место. Протоколы HTTP и WebSocket находятся на верхних уровнях и не видны маршрутизатору, они передаются только в виде данных.

Вам потребуется использовать другой номер порта для одного из них или использовать обратный прокси-сервер такие как HAProxy или nginx, которые могут обрабатывать протоколы более высокого уровня и маршрутизатор соответственно.

...