Сокет Соединение с сервером узла от https выдает ошибку смешанного содержимого - PullRequest
0 голосов
/ 27 марта 2019

У меня есть веб-сайт, работающий по протоколу https, и в рамках новой функции я создал сервер разговоров на основе nodejs + socket.io.

Я решил разместить сервер разговоров в отдельном экземпляре AWS. Когда я пытаюсь установить сокет-соединение с моего основного веб-сайта (работающего по протоколу https) на сервер разговоров (работающий на статическом IP-экземпляре AWS, например http://123.123.45.56), тогда он не устанавливает сокет-соединение должным образом, и браузер показывает следующую ошибку, зарегистрированную на консоли:

Mixed Content: The page at 'https://www.mydomain' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://123.123.45.56/socket.io/?payload=asdfkasdla'. This request has been blocked; the content must be served over HTTPS.

Вот как я делаю сервер узла соединения:

io.connect(chatServerURL,{query: "payload=" + encryptedPayload,secure: false});

На сервере разговоров я маршрутизирую весь трафик, поступающий через порт 80 с маршрутом /socket.io, на локальный узел, порт сервера и сервер, следующим образом:

  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3000/$1 [P,L]

  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/

Что я должен сделать, чтобы это работало? У меня нет домена для использования только для сервера чата, а затем назначить ssl этому домену Я знаю, что это не должно быть способом заставить это работать.

Каково его решение?

1 Ответ

0 голосов
/ 28 марта 2019

Это может помочь кому-то в будущем для правильного подхода.Это можно сделать, отправив сокет-соединение на один и тот же сервер, т. Е. Тот, который работает по протоколу https, а затем использовать обратный прокси-сервер для запроса прокси-сокета на другой компьютер, работающий по протоколу http (работает сервер node + socket.io).

На сервере Apache мне нужно включить модули proxy и proxy_http и добавить эти директивы в конфигурацию виртуального хоста apache:

ProxyPass /socket.io/ http://123.45.56.67/socket.io
ProxyPassReverse /socket.io/ http://123.45.56.67/socket.io

Для этого есть много ресурсов, я былпросто не знает об этой прокси-вещи.Это способ сделать это.

...