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-адрес, то есть 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
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. И после этого последнего, что мне не хватало, это Сеть -> Правила брандмауэра -> default-allow-internal -> все IP-адреса 0.0.0.0/0

увидеть это изображение

Выполнено

Tejas
источник