急:Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

cole

服务器是阿里云的centOS。开了一个4431的端口,并在nginx.conf中server加入了listen 4431;的监听。然后根据wokerman手册上面的wss教程,在服务器端start.php中代码如下:

$context = array(
    'ssl' => array(
        // 使用绝对路径
        'local_cert'  => '/usr/local/nginx/cert/xxxxxxxxxx.pem', // 也可以是crt文件
        'local_pk'    => '/usr/local/nginx/cert/xxxxxxxxxx.key',
        'verify_peer' => false,
    )
);
// 这里设置的是websocket协议
$worker = new Worker('websocket://0.0.0.0:4431', $context);
// 设置transport开启ssl,websocket+ssl即wss
$worker->transport = 'ssl';
$worker->onMessage = function($con, $msg) {
    $con->send('ok');
};
Worker::runAll();

其中证书是阿里云上申请的CA证书。因为要进行https化,所以在nginx配置中也加入了单独的项目配置,对443进行了监听。此时https访问域名www.weilinke.cn 是没问题的。也有绿色安全标识。可是进行聊天端口连接时报错:WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR。其中https使用的证书就是wokerman使用的xxxxxxx.pem和xxxxxxx.key。两者的路径是一致的。求大神指点迷津。

19590 1 0
1个回答

walkor

开了一个4431的端口,并在nginx.conf中server加入了listen 4431;

workerman开SSL用不到nginx,你这里nginx监听了4431,workerman也监听了4431是不对的。
workerman开SSL就是你上面的代码就可以了,和nginx没有任何关系。

  • cole 2017-10-10

    删掉nginx的431监听代码。还是报错:(index):161 WebSocket connection to 'wss://www.weilinke.cn:4431/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED。根据这个问题,我去阿里云的安全组-添加了新的公网出方向:端口范围4431/4431,授权对象0.0.0.0/0。依旧无效~

  • cole 2017-10-10

    是因为在Application/core下的start_gateway.php吗?我看这里面有个$gateway = new Gateway("websocket://0.0.0.0:8282");所以wokerman并没有监听到4431端口,所以拒绝连接吗?因为是新手,也是第一次对接wokerman,以前wokerman代码是其他同事写好的,所以很多不懂得,还请不要见怪。

  • walkor 2017-10-10

    你找下你们其它同事给你弄吧

  • cole 2017-10-10

    @1:- - 他们不会哟。ws没毛病,就是wss不会弄来着~~~

  • cole 2017-10-10

    多谢,已解决。原来每次修改代码都要重新启动一下wokerman才行。我每次修改之后,只更新了代码,没有重启wokerman,所以一直失败~

年代过于久远,无法发表回答
🔝