2016-01-27 13 views
8

私は私のサーバーとのwssの接続を確立しようとしたとき、私はこのエラーを取得しています:へWebSocketのエラー:ネット:: ERR_CONNECTION_CLOSED

のWebSocket接続「WSS:// MYDOMAIN:3000 /」に失敗しました: 接続確立でエラーが発生します。net :: ERR_CONNECTION_CLOSED

私は現在、ポート443と80上の要求をリッスンするためにapache2の仮想ホストの構成を設定している:

<VirtualHost *:80> 
     ServerName otherdomainname.co.uk 
     ServerAlias www.otherdomainname.co.uk 

     RewriteEngine On 
     RewriteRule ^/(.*)$ /app/$1 [l,PT] 

     JkMount /* worker2 

</VirtualHost> 

<VirtualHost _default_:443> 
     ServerName otherdomainname.co.uk 
     ServerAlias www.otherdomainname.co.uk 

     RewriteEngine On 
     RewriteRule ^/(.*)$ /app/$1 [l,PT] 

     SSLEngine On 
     SSLCertificateFile /etc/apache2/ssl/apache.crt 
     SSLCertificateKeyFile /etc/apache2/ssl/apache.key 

     <Location /> 
     SSLRequireSSL On 
     SSLVerifyClient optional 
     SSLVerifyDepth 1 
     SSLOptions +StdEnvVars +StrictRequire 
     </Location> 

     JkMount /* worker2 

</VirtualHost> 

あなたはそれがHTTPとHTTPSの両方で正常にWebページを提供していますTomcatにリクエストを渡すためにJkMountを使用して見ることができるように。私はポート80でHTTPプロトコルを使用してサイトにアクセスすると

のWebSocket接続がwsプロトコルを使用して製造することができます。

私はサイトが正しく配信されても​​、何のWebSocket接続がwssを使用して行われていないポート443でHTTPSプロトコルを使用してサイトにアクセスしてください。

私はWebSocketのサーバーを提供するために、「WS」のNode.jsモジュールを使用しています:

var WebSocketServer = require('ws').Server 
    , wss = new WebSocketServer({ port: 3000 }), 
    fs = require('fs'); 

wss.on('connection', function connection(ws) { 
    ws.on('message', function incoming(message) { 
    console.log('received: %s', message); 

    ws.send(message); 
    ws.send('something'); 
}); 

のはなぜ成功したのができませんhttpswssプロトコルを使用してのWebSocketサーバーに接続するのですか?

答えて

9

問題は、WebSocketサーバーをhttps/wss用に構成していないことでした。ここで

はnode.js.から「WS」を使用して、私の安全でないのWebSocketサーバーの安全なバージョンであります私は同様の問題を抱えていた

var WebSocketServer = require('ws').Server, 
    fs = require('fs'); 


var cfg = { 
     ssl: true, 
     port: 3000, 
     ssl_key: '/path/to/apache.key', 
     ssl_cert: '/path/to/apache.crt' 
    }; 

var httpServ = (cfg.ssl) ? require('https') : require('http'); 

var app  = null; 

var processRequest = function(req, res) { 

    res.writeHead(200); 
    res.end("All glory to WebSockets!\n"); 
}; 

if (cfg.ssl) { 

    app = httpServ.createServer({ 

     // providing server with SSL key/cert 
     key: fs.readFileSync(cfg.ssl_key), 
     cert: fs.readFileSync(cfg.ssl_cert) 

    }, processRequest).listen(cfg.port); 

} else { 

    app = httpServ.createServer(processRequest).listen(cfg.port); 
} 

var wss = new WebSocketServer({ server: app }); 

wss.on('connection', function connection(ws) { 
    ws.on('message', function incoming(message) { 
    console.log('received: %s', message); 

    ws.send(message); 

    }); 

    ws.send('something'); 
}); 
+1

私はこれをどこで設定しますか?私はNode.JSが新しく、この問題が発生しています。 – Andy

+0

公開鍵の暗号化用にWebサーバーをセットアップし、鍵と証明書の情報を提供する必要があります。 http://chrismepham.co.uk/blog/guide/how-to-convert-a-web-application-from-http-to-https/ – crm

0

は、私が唯一を通して非常に特定のポートを可能にCloudFlareを使用していたが判明しました。

したがって、ポート3000で実行中の流星はすぐにブロックされました。

私のリバースプロキシの設定を再設定し、許可されたポート上で流星を実行するには、私の問題を解決しました。

しかし、最後に、私は流星の展開にソケットをオフに。パフォーマンスに影響を与えているようではありません。幸運、

関連する問題