棘轮插座ws转ws

问题描述 投票:0回答:1

我有两个Docker容器。一个是运行在https上的应用,另一个是运行在Ratchet库上的web socket。

当我在Mac上的时候,我没有任何问题,可以从 httpsws我猜想这是因为Docker是运行在 127.0.0.1 所以我想有一些特殊的规则允许它。

切换到Win机器上,问题就出现了,因为Docker是在 192.168.99.100 而今 httpsws 不再工作,因为浏览器期待 httpswss 连接。只是将端点切换到 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自签名证书是不允许的。我可以在套接字容器上使用签名证书,并让应用程序容器使用自签名证书,或者它们都需要使用同一个证书吗?

EDIT.我想知道的是,我是否可以在socket容器上使用签名的证书,并将应用容器放在自签名的证书上,或者它们都需要使用同一个证书?

由于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,
    )
));
php docker websocket wss ratchet
1个回答
0
投票

我最终启动了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不会在你杀死容器时出错。

© www.soinside.com 2019 - 2024. All rights reserved.