Node.js Weiterleitung und Umschreibung, Webchat & Webserver

Skorpion1

New member
Hallo liebe Forengemeinde,

lang lang ist es her, das ich zuletzt 2013 mit meinem alten "Skorpion" Account noch aktiv am mitwirken war,
und die Registrierung nun deutlich leichter fällt ( früher war es noch mit richtigen Fachwissenden & -übergreifenden Fachfragen :D )

zum ersten Thema,
ein Bekannter hat einen kleinen eigenen Webchat ( das auch 20 Leute sich per Live-Stream unterhalten können etc, und baut das gerade seiner Mutter zuliebe so auf )
und hat mich um Rat gefragt, den ich nun bei Euch einholen möchte.

Er hat für seinen angemieteten HTTPS Webserver ein Server.js Script ( siehe unten ) erstellt,
und das zwar dank "ngixn" zum laufen gebracht wurde,
aber seine Server.js dies neu startet, anstelle den vorhandenen nutzt.

Die Server.js Datei baut eine Verbindung zu socket.io auf, aber er möchte seinen vorhandenen Webserver direkt nutzen.
Hier der Scriptauszug:

var static = require('node-static');
var https = require('https');
var fs = require('fs');
var file = new(static.Server)();
var options = {
key: fs.readFileSync('HTTPS_Permissions/key.pem'),
cert: fs.readFileSync('HTTPS_Permissions/cert.pem')
};
var app = https.createServer( options, function(req, res) {
file.serve(req, res);
}).listen(process.env.PORT || 443); <---- IST BEREITS VORHANDEN Über NGINX zu socket.io, WIE WIRD ES AM VORHANDENEM Webserver EINGEBUNDEN?

var io = require('socket.io').listen(app);
io.sockets.on('connection', function(socket) {


socket.on('message', function(message) {
socket.broadcast.emit('message', message);
});

socket.on('chat', function(message) {
socket.broadcast.emit('chat', message);
});

socket.on('create or join', function(room) {
var numClients = io.sockets.clients(room).length;

if (numClients === 0) {
socket.join(room);
socket.emit('created', room);
} else if (numClients == 1) {

io.sockets. in (room).emit('join', room);
socket.join(room);
socket.emit('joined', room);
} else {
socket.emit('full', room);
}
socket.emit('emit(): client ' + socket.id + ' joined room ' + room);
socket.broadcast.emit('broadcast(): client ' + socket.id + ' joined room ' + room);

});

});


Grüße,
und besten Dank für die Annahme!
 
Zuletzt bearbeitet:

Pik-9

Member
Hallo Skorpion,

wenn du deine Node.js Anwendung hinter einem nginx Proxy verstecken willst, solltest du bedenken, dass nginx in dieser Konfiguration nur als Vermittler dient, der den Netzwerkverkehr von außen annimmt und intern an Node.js weiterleitet.
Deswegen sollte Node.js nicht auf Port 443 lauschen; Dieser Port sollte nginx vorbehalten sein. Idealerweise lässt man Node.js Anwendungen auf Ports > 1023 lauschen, damit man sie mit normalen Benutzerrechten ausführen kann - aus Sicherheitsgründen.

Ansonsten wäre das komplette Unterfangen sinnlos; wenn man Node.js sowieso mit root-Rechten ausführt, kann man sich den Reverse-Proxy auch sparen und gleich Node.js als einzige Serveranwendung belassen.

TL;DR Lasse Node.js Socketverbindungen auf einem anderen Port (irgendwo über 1023) annehmen, führe dein Node.js Script mit normalen Benutzerrechten aus und richte eine Weiterleitung in deiner nginx Konfiguration ein. So wie hier: https://www.nginx.com/blog/nginx-nodejs-websockets-socketio/

Viele Grüße
🂩
 
Oben