Smoke

 
<<< Назад

Проксирование 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

Если у вас NGINX

Открывам /etc/nginx/sites-enabled/default и в него добавляем новый сервер:

server {
    listen 8002 default_server;
    ssl                     on;
    ssl_certificate         /etc/letsencrypt/live/**********************/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/********************/privkey.pem;

    server_name _;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_cache_bypass 1;
        proxy_no_cache 1;

        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Теперь запросы на порт 8002 будут проксироваться на 8001.
Далее, открываем файл /var/www/html/templates/websockets.html (Лучше сделать копию и положить в корень templates_alt, чтобы не затирать обновлениями.
Находим похожее и меняем на то, что ниже:

if (loc.protocol === "https:") {
            serverUrl = "wss:";
            addr = loc.hostname + ':8002/majordomo';
        } else {
            serverUrl = "ws:";
            addr = loc.hostname + ':8001/majordomo';
        }

        serverUrl += "//" + addr;

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

Обсуждение (7) (10)

Смотрите так же:
13.03.2023 Debounce настройка в z2m
06.03.2023 Боремся с mysql и жором места на диске
24.10.2021 Определяем выключен ли свет по камере о_О
18.10.2021 Опять прокси WS! Теперь для KeenDNS+NGINX
19.09.2021 Хитрый MJPEG или укрощение строптивого
08.06.2021 Парсим информер с Яндекс.Погоды
13.01.2021 Не разговаривает Алиса через облако?
15.12.2020 Разгоняем Xiaomi Home
02.11.2020 Как получить время езды до работы?
02.06.2020 Стилизация штатного редактора кода, часть 2
01.06.2020 Распознавание речи - бесплатно, просто, быстро.
01.06.2020 Стилизация штатного редактора кода
29.01.2020 Парсим данные баланса из ЛК Билайн (Update)
28.01.2020 Camshoter на свой лад
21.01.2020 Google Location + Yandex Maps, на свой лад
19.01.2020 Получение Я.Погоды из сценария
17.01.2020 Рассказ хейтера сцен в MJDM. Часть 2
17.01.2020 Как можно НЕ использовать сцены в MJDM. Часть 2
16.01.2020 Перезагружаем роутер Zyxel из MJDM
12.12.2019 Как подружить Camshoter и обычную вебку
07.10.2019 Управление планшетом из сцен/WEB
07.10.2019 Использование злосчастных WebSoccet
17.01.2020 ~DELETED~
23.07.2019 Как можно НЕ использовать сцены в MJDM. Часть 1.

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

На форуме: SmoKE_xDDD