【发布时间】:2021-10-20 19:18:01
【问题描述】:
我的开发环境是这样的:
- 操作系统:Microsoft Windows 10
- PHP 框架:Laravel 8.0
- PHP 7.4 版
- Websocket 服务器:cboden/ratchet 0.4.3
- WAMP 服务器 3.2.0 (Apache 2.4.41)
- Firefox 91.0.1(64 位)/铬
我创建了一个新的 Laravel 应用程序来实现安全 Websocket 服务器,并在客户端使用纯 JavaScript(Laravel 刀片文件)连接到它。 websocket 服务器工作正常,据我所见,它正在运行,但网络浏览器无法连接,如图所示:
我尝试过使用不同的 URL,有或没有端口号,但无济于事。 我使用 openssl.exe 工具创建了 SSL 证书和私钥文件,并将它们放在命令文件夹中进行测试。
这是我的安全 Websocket 服务器的句柄代码:
public function handle()
{
$loop = Factory::create();
$webSock = new SecureServer(
new Server('0.0.0.0:8090', $loop),
$loop,
array(
'local_cert' => 'certificate.crt',
'local_pk' => 'private.key',
'allow_self_signed' => TRUE,
'verify_peer' => FALSE
)
);
// Ratchet magic
$webServer = new IoServer(
new HttpServer(
new WsServer(
new WebSocketController()
)
),
$webSock
);
$loop->run();
}
httpd-ssl.conf 文件中的我的虚拟主机:
<VirtualHost *:443>
ServerName ssa
DocumentRoot "d:/web/app/ssa/public"
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/certificate.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/private.key"
SSLVerifyClient none
SSLVerifyDepth 10
<Directory "d:/web/app/ssa/public">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
ProxyRequests Off
ProxyPass /wss/ ws://ssa:8090
</VirtualHost>
已加载 Apache 模块 proxy_module、proxy_http_module 和 proxy_wstunnel_module。 Web 应用程序以 HTTPS 运行。 之前,它通过 HTTP 和 WS 运行,一切正常,但我需要保护这个应用程序,我在连接到安全的 websocket 服务器时遇到问题。
我错过了什么吗?
我的 Websocket 服务器或 Apache 配置有问题吗?
【问题讨论】:
-
确保
ssa注册为它运行所在位置的 DNS 别名。如果它在本地,那么通常你需要修改你的主机文件 -
是的@apokryfos,它在 hosts 文件中,应用程序在 HTTP / WS 协议下运行良好。
-
尝试访问
https://ssa以在您的浏览器中批准自签名证书并使用https://ssa作为您的套接字服务器,并且不要将套接字服务器作为安全服务器启动,因为您正在运行 apache 代理反正通过 https。
标签: javascript php laravel apache websocket