Ratchet Websocket无法在Godaddy专用服务器Laravel上使用Godaddy SSL

时间:2019-02-08 08:47:29

标签: php laravel ssl websocket ratchet

我正在Laravel中进行Ratchet(http://socketo.me/)的实时聊天项目。一切对我来说都很好,但是在我的域上安装SSL证书后,websocket无法连接到websocket服务器。我自己在专用服务器上使用WHM构建了cpanel,并安装了require模块。

我在服务器端口上运行的server.php文件代码为

     $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new ChatSocket()
            )
        ),
        8080
    );

    $server->run();

所有代码都在其中运行,保存和检索数据的我的ChatSocket类,

class ChatSocket implements MessageComponentInterface {

      protected $clients;

      public function __construct() {
            $this->clients = new \SplObjectStorage;
      }

      public function onOpen(ConnectionInterface $conn) {
            //store the new connection
            $this->clients->attach($conn);

            echo "someone connected\n";
      }

      public function onMessage(ConnectionInterface $from, $msg) {
           //send the message to all the other clients except the one who sent.
           foreach ($this->clients as $client) {
                if ($from !== $client) {
                      $client->send($msg);
                }
           }
      }

      public function onClose(ConnectionInterface $conn) {
           $this->clients->detach($conn);
           echo "someone has disconnected";
      }

      public function onError(ConnectionInterface $conn, \Exception $e) {
           echo "An error has occurred: {$e->getMessage()}\n";
           $conn->close();
      }
}

当我尝试使用下面的代码连接http时,对我来说很好用。

var conn = new WebSocket('ws://mydomain.com:8080');

但是当我实现SSL证书并将ws://更改为wss://时,它对我不起作用,如下所示,

var conn = new WebSocket('wss://mydomain.com:8080');

我也在此平台上进行搜索,并尝试了许多解决方案以使其运行,在服务器上设置ProxyPass,并通过在服务器的httpd.conf文件中放置以下代码来尝试与ProxyPass连接,但它对我也不起作用。我也为ProxyPass加载了模块,

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<IfModule mod_proxy.c>
<IfModule mod_proxy_ajp.c>

     ServerName www.mydomain.com

     ProxyRequests On
     ProxyVia On

     ProxyPass /_ws_ ws://mydomain.com:8080
     ProxyPassReverse /_ws_ ws://mydomain.com:8080

</IfModule>
</IfModule>

添加此内容后,我重新启动了httpd文件并重新启动了完整服务器,以确认apache服务器已重新启动。

请帮助我通过SSL与websocket建立连接。

我的问题是

  1. 我缺少为SSL实施的东西吗?
  2. 有什么方法可以检查ProxyPass是否正常工作,或者需要加载任何模块然后尝试使用它?
  3. 要在Laravel中使用ProxyPass,他们还需要在Laravel中定义它们的任何内容,还是ProxyPass本身可以工作?
  4. 我安装了WHM cpanel,它也无法与子域一起使用,在专用服务器上安装WHM cpanel时我是否错过了某些东西?

0 个答案:

没有答案