服務器是阿里云的centOS。開了一個4431的端口,并在nginx.conf中server加入了listen 4431;的監(jiān)聽。然后根據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進行了監(jiān)聽。此時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。兩者的路徑是一致的。求大神指點迷津。
開了一個4431的端口,并在nginx.conf中server加入了listen 4431;
workerman開SSL用不到nginx,你這里nginx監(jiān)聽了4431,workerman也監(jiān)聽了4431是不對的。
workerman開SSL就是你上面的代碼就可以了,和nginx沒有任何關系。
刪掉nginx的431監(jiān)聽代碼。還是報錯:(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。依舊無效~
是因為在Application/core下的start_gateway.php嗎?我看這里面有個$gateway = new Gateway("websocket://0.0.0.0:8282");所以wokerman并沒有監(jiān)聽到4431端口,所以拒絕連接嗎?因為是新手,也是第一次對接wokerman,以前wokerman代碼是其他同事寫好的,所以很多不懂得,還請不要見怪。