Я пытаюсь заставить 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 дня, уже гуглял и пробовал разные решения, но, похоже, ничего не работает.
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Заранее спасибо!