Smoke

<<< Back

Проксирование WebSocket с wss:// -> ws://

Используем прокси для перенаправления запросов с wss на ws

Зачем оно мне?

У тебя есть самоподписаный сертификат и доступ в мдм ты получаешь через https:// или у тебя есть свой домен с сертификатом LetsEncrypt и ты тоже открываешь УД через https:// во всех этих случаях WebSocket у тебя не работают. На всякий случай, через WebSocket происходит общение бекэнда с фронтэндом, т.е. данные на твоей сцене обновляются без обновления самой страницы.
Вот как раз проскирование сокетов позволяет направить данные из https:// на http:// (Это простым языком, не пинайте)

Apache

Делать будем на Apache, на nginx полно инструкций в интернете.

Погнали

Для начала узнаем версию Apache

server@server:~$ sudo apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2020-08-12T21:33:25

Если у вас ниже - возможно работать не будет, т.к. не хватит некоторых модулей.
Для начала включим модули для прокси и рестартим апач:

a2enmod proxy proxy_wstunnel proxy_http rewrite
systemctl restart apache2

После этого открываем конфигурацию сайта, лежат тут /etc/apache2/sites-enabled
У меня прикреплен домен и есть SSL сертификат, поэтому файл конфигурации выглядит так: domen.ru-le-ssl.conf
Открываем файл с правами на изменение и вписываем вниз:

ProxyPass               /wssoverws ws://192.168.1.100:8001/majordomo
ProxyPassReverse        /wssoverws ws://192.168.1.100:8001/majordomo

Как видим у меня порт стандартный (8001), объясню, что написано выше.
/wssoverws - адрес при переходе на который будет срабатывать прокси, например: ws://server/wssoverws ну а дальше, адрес на которых будет перенаправлен трафик
Естественно, IP нужно поменять на свои.
Далее, открываем файл /var/www/html/templates/websockets.html
Находим похожее и меняем на то, что ниже:

//Вставить в начало
window.onbeforeunload = function() {
            //wsSocket.onclose = function () {}; // disable onclose handler first
            wsSocket.close();
            console.log('close');
        };

if (loc.protocol === "https:") {
        serverUrl = "wss:";
        addr = loc.hostname + '/wssoverws';
} else {
        serverUrl = "ws:";
        addr = loc.hostname + ':<#WEBSOCKETS_PORT#>/majordomo';
}
serverUrl += "//" + addr;

Делаем рестарт апач и mdm:

systemctl restart apache2
systemctl restart majordomo

Все! При входе на сайт через https:// сокеты будут перенаправлены на http://

Discuss (6) (9)

See also:
2020-11-02 Как получить время езды до работы?
2020-06-02 Стилизация штатного редактора кода, часть 2
2020-06-01 Распознавание речи - бесплатно, просто, быстро.
2020-06-01 Стилизация штатного редактора кода
2020-01-29 Парсим данные баланса из ЛК Билайн (Update)
2020-01-28 Camshoter на свой лад
2020-01-21 Google Location + Yandex Maps, на свой лад
2020-01-19 Получение Я.Погоды из сценария
2020-01-17 Рассказ хейтера сцен в MJDM. Часть 2
2020-01-17 Как можно НЕ использовать сцены в MJDM. Часть 2
2020-01-16 Перезагружаем роутер Zyxel из MJDM
2019-12-12 Как подружить Camshoter и обычную вебку
2019-10-07 Управление планшетом из сцен/WEB
2019-10-07 Использование злосчастных WebSoccet
2020-01-17 ~DELETED~
2019-07-23 Как можно НЕ использовать сцены в MJDM. Часть 1.

Нижний Новгород, Россия

На форуме: SmoKE_xDDD