Сервер NodeJS недоступен извне

#node.js #iptables

#node.js #iptables

Вопрос:

Я развернул сервер nodejs в Rackspace, и к нему можно получить доступ изнутри, например, с помощью:

curl http://127.0.0.1:8080

Однако к нему невозможно получить доступ извне (из Интернета), даже если я сделаю это:

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

Вот как выглядит мой код:

 var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Simple servern');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');
  

Есть идеи?

Ответ №1:

Я думаю, вам следует попробовать не указывать IP.

 var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Simple servern');
}).listen(8080);
console.log('Server running at http://0.0.0.0:8080/');
  

Комментарии:

1. пробовал это только сейчас, но все равно не работает. Это то, что вы делаете на своем сервере. Как вы настраиваете iptables для своего сервера nodejs?

Ответ №2:

Я почти уверен, что вам нужно использовать

 iptables -A OUTPUT -p tcp  --sport 8080 -j ACCEPT
  

для исходящего правила (нет dport ). Кроме того, может быть, есть более раннее правило, которое блокирует трафик? Попробуйте iptables -L .

Ответ №3:

Столкнулся с такой же проблемой при настройке Nodejs на локальной виртуальной машине. Попробуйте выполнить следующие действия,

  1. Используйте listen(ПОРТ) в коде JS, в вашем случае ПОРТ будет 8080
  2. Добавьте приведенную ниже запись на серверной машине:
 $ sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
  

Комментарии:

1. Большое вам спасибо. Это устранило мою проблему с использованием компьютера Ubuntu.