Symfony Ratchet WSS - PullRequest
       24

Symfony Ratchet WSS

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

У меня проблема с HTTPS => WS-коммуникацией, и я не могу найти способ ее решить.

Я использую Symfony 4.1 и Ratchet WsServer. Сервер запускается с помощью команды Symfony на порту 9090 и корректно работает с ws на локальной машине с http. Конечно, по https я переключил его на wss и получил эту ошибку:

Соединение WebSocket с 'wss: // servername: 9090 /' не удалось: истекло время ожидания открытия WebSocket

Код моего конца:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $server = IoServer::factory(new HttpServer(
        new WsServer(
            new Widget($this->getContainer(), $this->logger)
        )
    ), 9090);

    $server->run();
}

Может быть, кто-нибудь знает, как это решить. Я видел несколько руководств по настройке nginx и apache в тех же ситуациях, но я не уверен, потому что в этом случае сервер запускается из PHP и Symfony.

Еще один интересный момент: я пытаюсь подключиться через браузер к WSS, я получаю ту же ошибку. Похоже, проблема не в сертификате, а в сервере.

1 Ответ

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

Я решаю это с помощью прокси NGINX. У меня есть NGINX + Apache, и в этом случае он помогает добавить прокси-сервер в NGINX.

upstream websocket_server {
     server app-ip:9091;
}
server {
    listen      46.101.45.214:443;
    server_name app-name ;
    ssl         on;
    ssl_certificate      /home/admin/conf/web/ssl.app-name.pem;
    ssl_certificate_key  /home/admin/conf/web/ssl.app-name.key;
    error_log  /var/log/apache2/domains/app-name.error.log error;

    location /wss/ {
        proxy_pass  http://websocket_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
    }
.....
...