WebSocket, использующий Apache2 Proxy Pass и сервер Nodejs WS, создает проблемы в браузере, используя внешний ip / домен - PullRequest
0 голосов
/ 04 ноября 2019

Я разрабатываю информационный дисплей, который должен отображать данные в режиме реального времени. Поэтому я использую сервер ws на сервере NodeJS и пакет isomorphic-ws для подключения к серверу. Код

const WebSocket = require("isomorphic-ws");

const ws = new WebSocket(
  "ws://<local-ip>:3001/endpoint"
);
ws.onmessage = console.log;
ws.onerror = console.log;

прекрасно работает и с моим доменом в среде nodejs. Поэтому в браузере код работает только с локальным ip моего сервера.

В браузере я получаю 404. Используя мой домен.

Конфигурация Apache 2:

<VirtualHost *:80>
    ServerName api.my-domain.de

    ProxyPass / http://127.0.0.1:3001/
    ProxyPassReverse / http://127.0.0.1:3001/

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =api.my-domain.de [NC]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*)  http://localhost:3001/$1 [P,L]
    RewriteCond %{SERVER_NAME} =api.my-domain.de [NC]
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*)  ws://localhost:3001/$1 [P,L]
</VirtualHost>

Спасибо за помощь!

PS: Если кто-томожет помочь мне изменить мой конфиг для соединений websocket с шифрованием ssl, это тоже было бы неплохо! (Может быть, это просто что-то вроде копирования блока и изменения порта на 443?)

РЕДАКТИРОВАТЬ: я теперь понял, что Chrome не позволяет подключаться к незащищенным каналам websocket. Теперь мне просто нужно знать, как я могу изменить свой конфиг для поддержки wss.

...