Як отримати доступ до сервера 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 = requ ('socket.io'); var 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 Defender \ Дозволені програми

Далі шукайте node.js у списку та натисніть змінити налаштування> Переконайтесь, що приватний доступ встановлено, а потім натисніть кнопку ОК.


3

Я знайшов вдале рішення цієї проблеми. Замість того, щоб робити всі конфігурації (встановлення брандмауера, порт пересилання тощо), я використовував localtunnel, який є утилітою для відкриття локального сервера вузлів через Інтернет. Ви можете використовувати його для розробки, тестування, спільного використання, просто не використовуйте його для виробництва.

Спочатку слід встановити localtunnel наступним чином:

$npm install -g localtunnel

Після цього налаштуйте додаток для вузла таким чином, щоб ваш сервер вузлів працював на localhost. Наприклад:

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

Запишіть your_port, який у моєму випадку був 3000 , і запустіть свій сервер вузлів.

Відкрийте інший термінал і введіть наступну команду для запуску localtunnel.

$lt --port 3000

Після цього в терміналі ви отримаєте URL-адресу, яку ви можете використовувати для розробки / тестування. Ця URL-адреса буде доступна в Інтернеті, щоб ви могли поділитися нею і з іншими. Поки ваш локальний тунель працює, інші можуть отримати доступ до вашого локального сервера вузлів.

Щоб отримати додаткові параметри конфігурації / допомогу, перегляньте документацію: https://www.npmjs.com/package/localtunnel

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.