2016-04-07 8 views
1

socket.io私のウェブサイトでチャットルームを作るのに私は自分のコンピュータでそれを実行しても問題はありませんが、プロダクションサーバで実行するとsocket.io.jsはエラー:サーバーとWebサイトがポート80nginxの後ろにポート8080でリッスンしているWebSocketハンドシェイクは400に応答しますが、まだ動作しています

クライアントのために、私は[email protected]使用しています

WebSocket connection to 'ws://myWebsite.com/socket.io/?EIO=3&transport=websocket&sid=1qtzy4QRde6G-PHkAAAU' failed: Error during WebSocket handshake: Unexpected response code: 400 

、すべてがエラーメッセージを除いて正常に動作しますが、チャットルームは、まだ機能しています、それはとてもです奇妙な。

私は、スタックオーバーフローの上にいくつかの同様の問題を検索しました、と示唆したソリューションは、すでに私のnginx設定(/etc/nginx/sites-enabled/myWebsite.com)は次のとおりです。

server { 
     listen 80; 
     server_name myWebsite.com; 

     location/{ 
       proxy_pass http://127.0.0.1:8080; 
       proxy_http_version 1.1; 
       proxy_set_header Host $host; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
     } 
} 

Meteor WebSocket handshake error 400 with nginx Meteor WebSocket connection to 'ws://.../websocket' failed: Error during WebSocket handshake: Unexpected response code: 400

チャットルームは、まだ動作しますが、私はまだエラーメッセージを取り除きたい

参考のため、以下はsocket.io関連コードです:

// I use angular.js as the front-end framework 
function Socket (socketFactory, $rootScope) { 
    var ioSocket = io.connect(window.location.host); 
    var socket = socketFactory({ioSocket : ioSocket}); 
    return { 
     on: function (eventName, callback) { 
      socket.on(eventName, function() { 
       var args = arguments; 
       $rootScope.$apply(function() { 
        callback.apply(socket, args); 
       }); 
      }); 
     }, 
     emit: function (eventName, data, callback) { 
      socket.emit(eventName, data, function() { 
       var args = arguments; 
       $rootScope.$apply(function() { 
        if (callback) { 
         callback.apply(socket, args); 
        } 
       }); 
      }); 
     } 
    }; 
} 
Socket.$inject = ['socketFactory', '$rootScope']; 
angular.module('core').factory('Socket', Socket); 

Socket.on('new message', function (data) { ... }); 
+0

したがって、ソケットはどのように接続されますか? 2番目のリクエストを送信していますか? WebSocketにアップグレードするのか、それともxhrにバックアップするのですか? –

+0

どのように動作しているのか分かりません。2つのブラウザタブを開きました。両方とも400応答でしたが、どちらもお互いからメッセージを受け取ることができました – kitlee

答えて

-1

私のウェブサイトがCloudFlareを使用していることに気がつきましたが、問題はプロキシを無効にしてから解決されました。