2017-10-09 4 views
0

J'ai un serveur de production entièrement fonctionnel avec la configuration suivante: NodeJS configuré avec Nginx et SSL sur le port 3000. ExpressJS comme avant.Problème de connexion de socket avec un serveur (ExpressJS + Nodejs + Nginx + SSL)

Maintenant, j'essaie d'ajouter un travail de socket à l'intérieur. J'ai créé un nouveau fichier appelé server.js avec le code suivant:

var net = require('net'); 

var HOST = '127.0.0.1'; 
var PORT = 6969; 

net.createServer(function(sock) { 

// We have a connection - a socket object is assigned to the connection automatically 
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort); 

// Add a 'data' event handler to this instance of socket 
sock.on('data', function(data) { 

    console.log('DATA ' + sock.remoteAddress + ': ' + data); 
    // Write the data back to the socket, the client will receive it as data from the server 
    sock.write('You said "' + data + '"'); 

}); 

// Add a 'close' event handler to this instance of socket 
sock.on('close', function(data) { 
    console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort); 
}); 

sock.on('error', function(err) { 
    console.log(err) 
}) 

}).listen(PORT, HOST); 

console.log('Server listening on ' + HOST +':'+ PORT); 

J'ai ajouté cette ligne dans mon fichier app.js:

require('./app/server'); 

Maintenant, quand je démarre le serveur, il impression comme prévu la ligne: "socket server écoute sur 127.0.0.1:6969" et "NodeJS serveur de production écoute sur le port 3000"

maintenant, lorsque je tente d'atteindre le serveur socket avec:

netcat [destination] 6969 

Cela ne fonctionne pas. Mais quand je l'ai essayé sur mon serveur de développement localhost qui n'a pas de SSL et Nginx cela a fonctionné.

Je dois probablement ajouter une configuration Nginx ou une connexion sécurisée pour voir le socket mais je n'ai trouvé aucun indice en ligne.

S'il vous plaît toute aide sera appréciée!

Répondre

0

Les sockets TCP ordinaires n'ont pas réellement besoin de Nginx pour fonctionner. Ils ne sont pas non plus cryptés et n'utilisent donc pas SSL. La raison la plus probable pour laquelle votre code ne fonctionne pas en production mais fonctionne localement est que vous écoutez une interface de bouclage 127.0.0.1. Cette interface n'est en aucun cas connectée à un réseau externe et vous ne pouvez pas l'atteindre de l'extérieur.

Vous devriez écouter si une adresse IP, affectée à une interface particulière sur le serveur, ou à 0.0.0.0 qui signifie essentiellement "écouter toutes les interfaces de la machine".