Wie greife ich im LAN auf den NodeJS-Server zu?

16

Ich bin nicht der kenntnisreichste Typ, der jemals mit Networking zu tun hatte, aber hier ist ...

Ich habe eine Anwendung mit NodeJS erstellt und möchte die Anwendung mit meiner Familie in meinem LAN testen. Die Anwendung lauscht auf Port 1337für Verbindungen und ich kann die Anwendung fein durch meinen eigenen PC durch Eingabe zugreifen localhost:1337, 192.168.0.3:1337oder sogar http://joel-pc:1337/in meine Browser-Adressleiste.

Ich werde neben NodeJS auch Apache ausführen, und ich kann darauf zugreifen, indem ich 192.168.0.3oder http://joel-pc/in die Adressleiste eines Browsers tippe, solange es mit demselben Netzwerk verbunden ist.

Hier ist der seltsame Teil; Wenn ich den Apache - Dienst beenden, meine Knoten - Anwendung ändern auf Port abzuhören 80(http) insted 1337, wird es auf meinem PC durch Eingabe zugänglich sein localhost, 192.168.0.3oder sogar http://joel-pcin meinen Browser-Adressleiste. Ich kann jedoch auf keinem anderen PC in meinem Netzwerk als meinem eigenen auf NodeJS zugreifen.

Ich habe versucht, eine ausgehende Regel in Windows 7 zu erstellen, um den Zugriff auf Port 1337 zu ermöglichen, aber ich kann auf keinem anderen PC als meinem eigenen auf meinen NodeJS-Server zugreifen, selbst wenn Port 80 überwacht wird. Ist etwas offensichtlich? Ich verpasse hier?

Joel Murphy
quelle
2
Was ist, wenn Sie nur als Test Ihre Firewall ausschalten?
Cheesemacfly
1
Wenn ich meine Firewall ausschalte, kann ich perfekt auf den Knoten zugreifen, danke :) Aber es muss doch eine sicherere Art geben, Dinge zu tun?
Joel Murphy
1
Ich habe es jetzt wieder angelegt, keine Sorge :) Soll ich auch dort posten? Oder gibt es eine Möglichkeit, meine Frage zu verschieben? Vielen Dank
Joel Murphy
2
Prost. Ich habe es auch markiert, weil ich in einem anderen Thread gelesen habe, dass es von 3 Benutzern markiert werden muss, bevor ein Moderator etwas unternimmt
Joel Murphy
2
Die Flagge, die ich gehisst habe, wurde als hilfreich erachtet, also nicht sicher, wie lange es dauern kann!
Cheesemacfly

Antworten:

11

Höchstwahrscheinlich bindet Ihre Knotenanwendung an die Loopback-IP-Adresse 127.0.0.1anstelle der "alle IPs", 0.0.0.0da dies das Standardverhalten von ist listen. Geben Sie in Ihrem Anruf sowohl Port als auch IP an server.listen(80, '0.0.0.0');und versuchen Sie es erneut.

Peter Lyons
quelle
3
In diesem Fall kann ich auf keinem anderen Gerät in meinem LAN auf Node zugreifen. Mein Code sieht ungefähr so ​​aus: var io = require ('socket.io'); var express = require ("express"); var app = express (); var server = require ('http'). createServer (app) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy
2
Das hat in meinem Fall funktioniert. In einigen drahtlosen Netzwerken localhostfunktioniert es als Zeichenfolge, in anderen müssen Sie es als127.0.0.1
Raul Rene
Dies ist angesichts der aktuell geschriebenen Frage falsch, da auf dem lokalen Computer tatsächlich über die LAN-Adresse zugegriffen werden kann, was bedeutet, dass auch diese Adresse abgehört wird.
Arlen Beiler
6

Holen Sie sich die aktuelle lokale Netzwerk-IP und führen Sie den http-Server wie folgt aus:

server.listen(80, 'current_local_ip');
Gonzalo Bahamondez
quelle
1
das funktioniert bei mir.
Psulek
Die NodeJS-Dokumente geben an, dass, wenn keine IP angegeben ist, der Platzhalter abgehört wird (in der Reihenfolge: ::oder 0.0.0.0)
Arlen Beiler,
3

Zunächst müssen Sie C:\Program Files (x86)\nodeder Liste der vertrauenswürdigen Anwendungen in Ihrer Firewall hinzufügen .

Dann können Sie in Ihrer Knoten-App schreiben:

listen(3333, '172.24.14.26', function() {

oder:

listen(3333, '0.0.0.0', function() {

oder:

listen(3333, function() {

oder:

listen(80, '172.24.14.26', function() {

oder:

listen(80, '0.0.0.0', function() {

oder:

listen(80, function() {

Jede dieser 6 Kombinationen funktioniert in meinem Fall: node.js unter Windows Server 2016, geschützt durch einen Firmenproxy.

Michael Bernheiden
quelle
3

Das Folgende hat bei mir auf einem Windows-PC funktioniert. Versuchen Sie dies: öffnen

Systemsteuerung \ System und Sicherheit \ Windows Defender Firewall \ Zulässige Apps

Suchen Sie als Nächstes in der Liste nach node.js und klicken Sie auf Einstellungen ändern> Stellen Sie sicher, dass der private Zugriff aktiviert ist, und klicken Sie dann auf OK.

Donner
quelle
3

Ich habe eine gute Lösung für dieses Problem gefunden. Anstatt alle Konfigurationen vorzunehmen (Firewall einstellen , Port weiterleiten usw.), habe ich localtunnel verwendet , ein Dienstprogramm zum Offenlegen des lokalen Knotenservers über das Internet. Sie können es für Entwicklungs-, Test- und Freigabezwecke verwenden, aber nicht für die Produktion.

Zuerst müssen Sie localtunnel wie folgt installieren:

$npm install -g localtunnel

Konfigurieren Sie anschließend Ihre Knoten-App so, dass Ihr Knotenserver auf localhost ausgeführt wird. Zum Beispiel:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

Notieren Sie sich your_port , in meinem Fall 3000 , und starten Sie Ihren Knotenserver .

Öffnen Sie ein anderes Terminal und geben Sie den folgenden Befehl ein, um localtunnel auszuführen.

$lt --port 3000

Danach erhalten Sie im Terminal eine URL, die Sie für Entwicklungs- / Testzwecke verwenden können. Diese URL wird im Internet verfügbar sein, sodass Sie sie auch mit anderen teilen können. Solange Ihr Localtunnel ausgeführt wird, können andere auf Ihren lokalen Knotenserver zugreifen.

Weitere Konfigurationsoptionen / Hilfe finden Sie in der Dokumentation: https://www.npmjs.com/package/localtunnel

k33da_lets_debug
quelle