[英]Ratchet socket ws to wss
我有两个 Docker 容器。 一个是在 https 上运行的应用程序,另一个是在 Ratchet 库上运行的 web 套接字。
当我在 Mac 上时,从https
连接到ws
没有问题,我认为这是因为 Docker 在127.0.0.1
上运行,所以我想有一些特殊规则允许它。
切换到 Win 机器时出现问题,因为wss
位于192.168.99.100
上,现在将https
连接到ws
不再有效,因为浏览器期待https
连接。 只是将端点切换到wss://
而不是ws://
显然不能开箱即用,因为连接握手自然会超时。
我的套接字容器没有运行 nginx 和 apache,它是一个简单的 Ratchet 服务器,最终只是暴露了我在外面告诉它的端口。
是否有一些关于如何切换到wss
的好资源,因为我找不到。
这是我尝试过的:
$server = IoServer::factory(new HttpServer($wsServer), $config['port'], '0.0.0.0', [
'local_cert' => __DIR__ . '/../config/cert.pem',
'allow_self_signed' => true,
'verify_peer' => false,
'ciphers' => 'TLSv1.2'
]);
此代码不会出错,但也不会启用wss
端点,因为同样的事情正在发生。 我该如何继续并完成这项工作? 另外,我在某处读到不允许使用 wss 自签名证书。 我可以在套接字容器上使用签名证书并在自签名证书上使用应用程序容器,还是它们都需要使用同一个?
编辑:
由于 Ratchet 不久前删除了 SSL,我将代码添加到IoServer::factory()
:
public static function factory(MessageComponentInterface $component, $port = 80, $address = '0.0.0.0', array $sslContext = null) {
$loop = LoopFactory::create();
$socket = new Reactor($address . ':' . $port, $loop);
if (is_array($sslContext)) {
$socket = new SecureReactor($socket, $loop, $sslContext);
}
return new static($component, $socket, $loop);
}
但即使没有它,我也尝试了另一种方式:
$server = new IoServer(new HttpServer($wsServer), new SecureServer($webSock, $loop, array(
'local_cert' => __DIR__ . '/../config/cert.pem',
'allow_self_signed' => true,
'verify_peer' => false,
)
));
我最终按原样启动 Ratchet (正常ws
)并在应用程序端执行 nginx 代理传递:
location /ws {
resolver 127.0.0.11 valid=30s;
set $backend "http://container_name:port";
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass $backend;
}
解析器部分确保 nginx 在您杀死容器时不会出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.