Как установить sh соединение Socket.IO между двумя серверами, подключенными через локальную сеть - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два сервера, каждый из которых установлен: Ubuntu 18.04.2 LTS и панель VestaCP

Сервер # 1
Есть сайт " example.com", с Socket.IO:

var socket = io("https://www.example.com:8600/", {secure: false});

Сервер имеет внешний ip: 111.111.111.111 и 2 ethe rnet:

  1. Inte rnet подключение (внешний ip)
  2. Маршрутизатор Mikrotik

Сервер # 2
Есть сайт " bbb. net" и Node.js + Socket.IO, который должен ответить на запрос от сервера # 1 .
Локальный ip для сайта " bbb. net" равен "192.168.88.253"
На сервере нет внешнего ip.

Оба сервера подключены к маршрутизатору "Mikrotik HAP lite" (4 порта)
Подключенные модули: a2enmod proxy proxy_http proxy_wstunnel
Конфигурация на сайте " example.com " /home/admin/conf/web/example.com.apache2.ssl.conf:

<VirtualHost 111.111.111.111:8443>

    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin info@example.com

    # redirect - which should forward http://socket.io request to server #2
    <Proxy *>
            Require all granted
    </Proxy>
    ProxyRequests off
    ProxyVia on

    RewriteEngine On
    RewriteCond %{REQUEST_URI}      ^/socket.io            [NC]
    RewriteCond %{QUERY_STRING}     transport=websocket    [NC]
    RewriteRule /(.*)               ws://192.168.88.253:8600/$1 [P,L]
    ProxyPass        :8600/         https://192.168.88.253:8600/
    ProxyPassReverse :8600/         https://192.168.88.253:8600/
    # end

    ... further unchanged default settings VestaCP

Если создать соединение на одном из сайтов на сервере # 2 - Socket.IO и выполнить настройки .apache2.ssl.conf, как показано выше, то все работает успешно, но нет соединения с сервера # 1 , ошибка: GET https://www.example.com:8600/socket.io/?EIO=3&transport=polling&t=N5zkMiN net::ERR_CONNECTION_REFUSED

Если в терминале сервера # 1 введите: curl https://192.168.88.253:8600, то Node.js с сервера # 2 ответ успешно.

Насколько я понимаю, настроенный на сервере ProxyPass # 1 не может получить доступ к локальному ip сервера # 2 , хотя через терминал на сервере # 1 с помощью команды "curl" - все работает нормально, Node.js с сервера # 2 имеет успешный ответ.

Как это исправить, чтобы Socket.IO с сайта # 1 мог установить sh соединение с Node.js на одном из сайты сервера # 2 , при условии, что серверы подключены через роутер Mikrotik в локальной сети?

Как создать соединение, без участия внешнего ip?

...