首页 > 解决方案 > Websocket 不适用于 Apache 中的 WSS

问题描述

让我详细解释一下整个场景:

我们有两台服务器: - 一台共享主机 - 另一台是 VPS

我们的要求是在项目中设置 websocket。但要这样做,共享主机不允许打开自定义端口。所以我们决定购买另一台“VPS”服务器。

检查下图:

在此处输入图像描述

如上图所示,我们的门户网站使用 VPS 服务器进行 websocket 连接。

共享主机是 HTTPS。而且VPS服务器也有SSL。所以它也是HTTPS。


因此,如果我将门户网站与“ws”连接,如下所示:

var wsocket = new WebSocket("ws://DOMAIN_NAME_OF_VPS:PORT")

然后它给出如下错误:“混合内容:' https ://example.com' 的页面是通过 Https 加载的,但尝试连接到不安全的 websocket 端点'ws://DOMAIN_NAME_OF_VPS:PORT'。这个请求有已被阻止;此端点必须通过 WSS 可用。”

所以很明显我们不能在HTTPS中使用WS。

所以我们只需将 WS 替换为 WSS,如下所示(当然我们安装了 SSL 证书):

var wsocket = new WebSocket("wss://DOMAIN_NAME_OF_VPS:PORT")

现在我收到此错误:与 'wss://DOMAIN_NAME_OF_VPS:PORT' 的 websocket 连接失败:WebSocket 打开握手超时。


关于websocket服务器(vps服务器):

我正在使用 Ratchet 在 PHP 中进行 websocket 集成。 http://socketo.me/

我正在为 PHP 使用 Apache 引擎。


棘轮服务器代码:

<?php

require __DIR__ . "/../vendor/autoload.php";

use Chat\Chat;

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

$server = IoServer::factory(new HttpServer(new WsServer(new Chat)), 19994);

$server->run();

?>

000-默认文件是:


如果我在门户网站中使用 http,并为 websocket 使用“ws”,那么一切正常。

所以我不明白为什么“wss”不能与“https”一起使用,而我已经在 VPS 中集成了 SSL。

有没有其他方法可以告诉 websocket 使用 SSL 文件?

我错过了什么吗?

你的帮助对我来说非常重要。

非常感谢,提前祝大家新年快乐。

标签: phpwebsocketratchetphpwebsocket

解决方案


推荐阅读