2017-12-24 29 views
1

Ich habe einen Socket.io-Server auf Port 3000 ausgeführt und wenn es (und die Website/Client) lokal ausgeführt wird, funktioniert alles einwandfrei. Aber wenn ich es auf den Server schiebe, kann der Client keine Verbindung mehr herstellen.Socket.io-Client verbindet nicht

Der Produktionsserver läuft über SSL, daher nahm ich an, dass der Socket.io-Server auch über SSL ausgeführt werden muss. Ich habe es wie folgt eingerichtet:

var app = express(); 

var fs = require('fs'); 

var is_production = process.env.NODE_ENV === 'production'; 

if(is_production){ 
    var options = { 
     key: fs.readFileSync('/etc/letsencrypt/live/mywebsite.com/privkey.pem'), 
     cert: fs.readFileSync('/etc/letsencrypt/live/mywebsite.com/cert.pem'), 
     requestCert: true 
    }; 

    var server = require('https').createServer(options, app); 
}else{ 
    var server = require('http').createServer(app); 
} 

var io = require('socket.io')(server); 
server.listen(3000); 

Dies funktioniert immer noch nicht. Ich habe nicht viel Erfahrung mit Socket.io, so würde jede Hilfe geschätzt werden. Beachten Sie auch, dass alles funktioniert hat, bevor ich ein SSL-Zertifikat auf dem Webserver eingerichtet habe.

Der Client verbindet sich mit ws://mywebsite.com:3000. Ich habe versucht mit http://, https:// und wss:// auch, aber nichts funktioniert.

EDIT: Ich habe versucht, eine Anfrage durch curl machen und ich erhalte den folgenden Fehler:

curl: (35) gnutls_handshake() failed: The TLS connection was non-properly terminated. 

Antwort

0

Ich konnte nicht herausfinden, was das Problem war, so ist hier, was ich tat.

Ich habe Nginx läuft auf dem gleichen Server, meine Website zu bedienen, was ich am Ende war Nginx konfigurieren, um alle SSL-Verbindungen zu Port 3000 Proxy und Weiterleiten an die node.js Server auf Port 8080. Auf diese Weise kümmert sich Nginx um SSL, sodass der node.js-Server keine zusätzliche Konfiguration benötigt.