Как получить доступ к серверу NodeJS в локальной сети?


16

Я не самый знающий парень, когда-либо работающий с сетями, но здесь идет ...

Я создал приложение с NodeJS, и я хотел бы проверить приложение в моей локальной сети со своей семьей. Приложение прослушивает порт 1337для подключения , и я могу получить доступ к штрафу приложения через мой собственный компьютер, набрав localhost:1337, 192.168.0.3:1337или даже http://joel-pc:1337/в адресной строке браузера.

Я также буду работать с Apache вместе с NodeJS, и я могу получить доступ к этому штрафу, набрав 192.168.0.3или http://joel-pc/в адресной строке браузера, если он подключен к той же сети.

Теперь вот странная часть; Если я остановить службу Apache, изменить мое приложение узла прослушивать порт 80(HTTP) InstEd из 1337, он будет доступен на моем компьютере с помощью набора текста localhost, 192.168.0.3или даже http://joel-pcв адресной строке браузера. Тем не менее, я все еще не могу получить доступ к NodeJS на любом другом компьютере в моей сети, кроме моего собственного.

Я попытался создать исходящее правило в Windows 7, чтобы разрешить доступ к порту 1337, но я все еще не могу получить доступ к своему серверу NodeJS на любом другом компьютере, кроме моего, даже если он прослушивает порт 80. Есть ли что-то очевидное Я пропускаю здесь?


2
Что если, только в качестве теста, вы выключите брандмауэр?
cheesemacfly

1
Если я выключу свой брандмауэр, я смогу получить доступ к узлу отлично, спасибо :) Но наверняка должен быть более безопасный способ делать вещи?
Джоэл Мерфи

1
Я положил его обратно сейчас, не волнуйтесь :) Должен ли я опубликовать там тоже? Или есть способ перенести мой вопрос? спасибо
Джоэл Мерфи

2
Приветствия. Я помечено это тоже , потому что я читал в другом потоке , что он должен быть помечен 3 -х пользователей , прежде чем любое действие принимается замедлителя
Джоэл Мерфи

2
Поднятый мною флаг был признан полезным, поэтому не уверен, сколько времени это займет!
cheesemacfly

Ответы:


11

Скорее всего, приложение вашего узла привязывается к петлевому IP-адресу 127.0.0.1вместо «всех IP-адресов», 0.0.0.0так как это поведение по умолчанию listen. Укажите порт и IP-адрес в своем вызове, как, server.listen(80, '0.0.0.0');и попробуйте еще раз.


3
Если я сделаю это, я все равно не смогу получить доступ к Node на любом другом устройстве в моей локальной сети. Мой код выглядит примерно так: 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 ');
Джоэл Мерфи

2
Это сработало в моем случае. В некоторых беспроводных сетях localhostработает как строка, но в других вы должны набрать ее как127.0.0.1
Рауль Рене

Это неверно в свете вопроса, как он написан в настоящее время, потому что к нему можно получить доступ на локальном компьютере, используя адрес локальной сети, что означает, что он также прослушивает этот адрес.
Арлен Бейлер

6

Получите текущий IP-адрес локальной сети и запустите http-сервер следующим образом:

server.listen(80, 'current_local_ip');

1
это работает для меня.
psulek

Документы NodeJS утверждают, что если IP не указан, он будет прослушивать с подстановочными знаками (по порядку: ::или 0.0.0.0)
Арлен Бейлер

3

Во-первых, вам нужно добавить C:\Program Files (x86)\nodeв список доверенных приложений в вашем брандмауэре.

Затем в приложении вашего узла вы можете написать:

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

или:

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

или:

listen(3333, function() {

или:

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

или:

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

или:

listen(80, function() {

Каждая из этих 6 комбинаций работает в моем случае: node.js на Windows Server 2016, защищенный прокси-сервером компании.


3

Выполнение следующих работ у меня работало на ПК с Windows. Попробуйте это: открыть

Панель управления \ Система и безопасность \ Брандмауэр Защитника Windows \ Разрешенные приложения

Затем найдите в списке файл node.js и нажмите «Изменить настройки»> Убедитесь, что частный доступ проверен, а затем нажмите «ОК».


3

Я нашел хорошее решение для этой проблемы. Вместо того, чтобы делать все настройки (настройка брандмауэра, переадресация порта и т. Д.), Я использовал localtunnel, который является утилитой для показа сервера локального узла через Интернет. Вы можете использовать его для разработки, тестирования, совместного использования, просто не используйте его для производства.

Сначала вы должны установить localtunnel следующим образом:

$npm install -g localtunnel

После этого настройте приложение узла так, чтобы сервер узла работал на локальном хосте. Например:

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

Запишите your_port, который в моем случае был 3000 , и запустите сервер вашего узла.

Откройте другой терминал и введите следующую команду для запуска localtunnel.

$lt --port 3000

После этого в терминале вы получите URL, который вы можете использовать для разработки / тестирования. Этот URL будет доступен в Интернете, чтобы вы могли поделиться им с другими. Пока ваш localtunnel работает, другие могут получить доступ к вашему серверу локальных узлов.

Для получения дополнительных параметров конфигурации / справки вы можете просмотреть документацию: https://www.npmjs.com/package/localtunnel

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.