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

Если у вас 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://

Discuss (7) (10)

See also:
2023-03-13 Debounce настройка в z2m
2023-03-06 Боремся с mysql и жором места на диске
2021-10-24 Определяем выключен ли свет по камере о_О
2021-10-18 Опять прокси WS! Теперь для KeenDNS+NGINX
2021-09-19 Хитрый MJPEG или укрощение строптивого
2021-06-08 Парсим информер с Яндекс.Погоды
2021-01-13 Не разговаривает Алиса через облако?
2020-12-15 Разгоняем Xiaomi Home
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