Websocket (Ratchet / zeroMQ) с прокси-сервером Apache и SSL - на сервере Plesk - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь заставить websocket / push-сервер работать с SSL и не могу заставить его работать. Вот некоторые сведения о том, что я использую и что я сделал до сих пор:

  • Сервер Ubuntu 16.04.6 LTS с Plesk 17.8.11
  • Apache версия 2.4.18
  • Установлено храповик и расширение zmq
  • autobahn.js для подключения к веб-сокету
  • PHP-FPM (7.2.19), обслуживаемый Apache
  • Брандмауэр отключен для тестирования
  • Включены моды Apache: прокси, proxy_balacer, proxy_fcgi, proxy_http, proxy_wstunnel

Когда я использую не-SSL-соединение через autobahn.js с ws://my.domain.net:8888/, все работает отлично. Как только я пытаюсь использовать wss://my.domain.net/wss/, в моем браузере появляется 504 таймаута соединения.

Часть моего push-server.php:

$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://0.0.0.0:5555'); // set to 0.0.0.0 for testing, was 127.0.0.1 before but didn't work either
$pull->on('message', array($pusher, 'onMessage'));

$webSock = new React\Socket\Server('0.0.0.0:8888', $loop);
$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Ratchet\Wamp\WampServer(
                $pusher
            )
        )
    ),
    $webSock
);

$loop->run();

Сервер прослушивает оба порта:

php        3957               root   17u     IPv4          823972456      0t0       TCP *:8888 (LISTEN)
ZMQbg/0    3957  3958         root   17u     IPv4          823972456      0t0       TCP *:8888 (LISTEN)
ZMQbg/1    3957  3959         root   17u     IPv4          823972456      0t0       TCP *:8888 (LISTEN)


php        3957                  root   16u     IPv4          823972455      0t0       TCP *:5555 (LISTEN)
ZMQbg/0    3957  3958            root   16u     IPv4          823972455      0t0       TCP *:5555 (LISTEN)
ZMQbg/1    3957  3959            root   16u     IPv4          823972455      0t0       TCP *:5555 (LISTEN)

Моя конфигурация apache:

SSLProxyEngine on
ProxyRequests Off
SetEnv proxy-initial-not-pooled 1
ProxyPass /wss/ https://my.domain.net:8888/
ProxyPassReverse /wss/ https://my.domain.net:8888/

Я тоже пытался использовать

ProxyPass /wss/ wss://my.domain.net:8888/

но тогда я получаю следующее сообщение об ошибке

[proxy:warn] AH01144: No protocol handler was valid for the URL /wss/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Теперь, когда я пытаюсь открыть соединение с autobahn.js для wss://my.domain.net/wss/, запрос загружается некоторое время и заканчивается через 504 Gateway Time-out, и я получаю следующее сообщение об ошибке:

[proxy_http:error] (103)Software caused connection abort: [client x.x.x.x:33362] AH01102: error reading status line from remote server my.domain.net:8888
[proxy:error] [client x.x.x.x:33362] AH00898: Error reading from remote server returned by /wss/

Часть заголовков запроса:

Cache-Control: no-cache
Connection: Upgrade
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: WG/ajAsTaVhBgEeEz5wiUg==
Sec-WebSocket-Protocol: wamp
Sec-WebSocket-Version: 13
Upgrade: websocket

Часть заголовков ответа:

Connection: keep-alive
Content-Length: 578
Content-Type: text/html
Server: nginx

Открытие https://my.domain.net/wss/ в браузере также заканчивается тайм-аутом шлюза, обслуживаемым nginx.

Я провел, как 2 дня, уже гуглял и пробовал разные решения, но, похоже, ничего не работает. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Заранее спасибо!

...