Node.js недоступний із зовнішніх IP-адрес Ubuntu


18

Я впевнений, що це дуже нобіш, тож прости мене. Я намагаюся запустити сервер node.js на порт 8080 мого ubuntu 10.04.

Ось результат iptables -L на сервері:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Ось результат nmap -p 8080 (редагував ip-адресу, тому що все є або має бути широко відкритим)

nmap 173.203.xxx.xxx -p 8080 -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
Interesting ports on xxx (173.203.xxx.xxx):
PORT     STATE  SERVICE    VERSION
8080/tcp closed http-proxy

Чому на землі 8080 вважається закритим? Додавання цього не допомогло:

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT

Я справді розгублений.

Я додам це, якщо це допоможе, але я не знаю

 netstat -pan | grep 80
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2

Я можу отримати доступ до свого звичайного веб-сайту, який працює з порту 80 на apache, але сервер node.js недоступний зовні. Доступ до нього з самого сервера працює чудово.

Отже, моє запитання: як би я подумав про налагодження цього? Чи може бути щось інше, ніж iptables, що блокують деякі порти? Як я дізнаюся, що це?

Будь-яка допомога дуже вдячна!


Для тих, хто завітав сюди через Google: Якщо ви розмістили службу в хмарі Google і стикаєтеся з цією проблемою, спочатку переконайтеся, що ви додали порт у правила виключення хмарного брандмауера , а також у брандмауер операційних систем
Atul

Відповіді:


30

Дякуємо, що додали останній висновок netstat, це дійсно допомогло. Ви не можете отримати доступ до node.js ззовні, оскільки він прослуховує IP-адресу localhost, тобто 127.0.0.1. Вам потрібно налаштувати node.js для прослуховування на 0.0.0.0, щоб він міг приймати з'єднання на всіх IP-адресах вашої машини.

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');

Я підозрював це, але ніколи раніше не стикався з 0,0.0.0, тому нехтував цим. Я застосував ваше виправлення, і це вдалося, дякую!
Мікаель Грамонт

У мене теж є ця проблема. Я дотримувався цього коду, але мій сервер nodejs все ще недоступний ззовні.
xybrek

Так, тут же.

1
не працювало для мене
Jitendra Pancholi

Не працював для мене на MacOS Sierra з Node v8.1.3
Liran H

4

Згідно з вашим результатом netstat, порт 8080 відкритий лише для 127.0.0.1, що є localhost, отже, доступ із сервера працює (що є localhost), але не з будь-якого іншого місця.

Правий вихід повинен виглядати так

0.0.0.0:8080

0

У мене був той самий випуск.

Я зробив наступне

  1. У Google Cloud Console вам потрібно включити порти, які ви використовуєте для Nodejs
  2. використовуйте наступне посилання для включення тих же портів на сервері Ubuntu https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04

  3. І після цього останнього мені бракувало Мережі -> Правила брандмауера -> За замовчуванням-дозволити-внутрішній -> вся IP-адреса 0.0.0.0/0

дивіться це зображення

Зроблено

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