2016-02-29 33 views
5

以前はhttpでSocket.ioスクリプトが正常に動作していましたが、httpsにアップグレードすると問題が発生しました。私はサーバ上に証明書をインストールしましたが、運はありません。サーバーのセットアップのためのコードは次のとおりです。SSL経由のSocket.io Node.jsを使用したゲートウェイのエラー

var https = require('https'), 
    fs = require('fs'); 

var options = { 
    key: fs.readFileSync('/etc/nginx/ssl/default/54082/server.key'), 
    cert: fs.readFileSync('/etc/nginx/ssl/default/54082/server.crt') 
}; 
var app = https.createServer(options); 

var io = require('socket.io').listen(app); 

ただし、Webブラウザでページがそれに接続するために失敗し、コンソールがthe server responded with a status of 502 (Bad Gateway)応答を示しています。

スクリプトの設定が間違っているかどうかについてのご意見はありますか?あるいは、Nginxの設定で何か?

感謝

編集:私は接続するために使用していフロントエンドコード:

<script type="text/javascript" src="https://socket.example.com/socket.io/socket.io.js"></script> 
<script> 
var io = io('https://socket.example.com', { secure: true }); 
</script> 

編集:: nginxの設定ファイル:

# FORGE CONFIG (DOT NOT REMOVE!) 
include forge-conf/socket.example.co.uk/before/*; 

server { 
    listen 443 ssl; 
    server_name socket.example.co.uk; 
    root /home/forge/socket.example.co.uk; 

    # FORGE CONFIG (DOT NOT REMOVE!) 
    include forge-conf/socket.example.co.uk/server/*; 

    location/{  
     proxy_pass https://socket.example.co.uk:3000; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection 'upgrade'; 
     proxy_set_header Host $host; 
     proxy_cache_bypass $http_upgrade; 
    } 

} 

# FORGE CONFIG (DOT NOT REMOVE!) 
include forge-conf/socket.example.co.uk/after/*; 
+1

あなたは{確保:真}渡しているが、この行を追加し、サーバーに接続中? http://stackoverflow.com/questions/6599470/node-js-socket-io-with-ssl –

+0

nginxからnode.jsにプロキシする必要はありません。ポートが開いているので、 'io 'で接続します。クライアントからの接続( ''、{secure:true});は起動して実行するために必要なすべてです。 nginxでプロキシすることはできません(ノードはすべてのインターフェイスにバインドされ、DNS設定のためにドメインはあなたのip:portにルーティングされるため、不要です)。私は文字通り問題なく、昨日私のソケットioをhttpsにアップグレードしました。 – r3wt

+0

@ r3wtだからあなたはドメインが何か違うべきだと言っているのですか?それは何でしょうか? Iコードを使用してい 'VARのIO = IO( 'https://socket.example.com/socketio/socketio.js'、{確保:真});それ限り必要とされない' – samiles

答えて

3
  1. メイクドメインがサーバーを指していることを確認してください。
  2. sslが有効になっているドメインでnginxサーバーブロックが実行されていることを確認してください。
  3. nginxの設定からsocket.ioサーバーを実行しているポートへのプロキシを試みる場所ブロックをすべて削除します。
  4. SSL証明書が有効であることを確認してください。
  5. io.connect()の代わりに接続してください。 URL(https://)のプロトコル部分を除外します。
  6. 長引くとあなたのポートにバインドされている可能性のあるゾンビプロセスを殺すためにコマンドラインからsudo killall -9 nodeを使用しています。正常にシャットダウンできないときにsocket.ioが発生することがあります。私自身のコードから

例:私自身のドメインから

var socket = io.connect('dev.somedomain.com:3000',{secure:true}); 

サーバの例:

var fs = require('fs'), 
    https = require('https'), 
    config = JSON.parse(fs.readFileSync('./config.json','utf-8')), 
    serverOpts = { 
     key: fs.readFileSync(config.server.key), 
     cert: fs.readFileSync(config.server.cert) 
    }, 
    server = https.createServer(serverOpts,function(req,res){}), 
    io = require('socket.io').listen(server); 

io.on('connection', function(socket){ 
    console.log('houston, we have lift off'); 
}); 

server.listen(config.port, function(){ 
    log('listening on *:%d',config.port); 
}); 

は明らかに私は設定から​​私の証明書とキーファイルへのパスを読んでいます。 jsonファイルが、あなたは正しいアイデアを得るべきですか?

+0

これには何の運もありませんでした。とにかく助けてくれてありがとう。多分何かを壊している私のセットアップの何か他のものがあります...私はただ今、あきらめています... – samiles

2

502(不良ゲートウェイ)nginxのサービスがプロキシサーバに連絡を試みたが失敗したことを示しています。 nginxの設定行は、

proxy_pass https://socket.example.co.uk:3000; 

のようです。ポート3000が使用されていることをnodejsコードから確認できませんでした。

-2

私と同じ問題ましたが、apache2ので、私はそれを解決することで、私のバーチャルホストの設定に

SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off

関連する問題