Вопрос: Сайт Node.js отказывается от подключения


У меня есть новая настройка экземпляра Ubuntu на Amazon EC2. Этот экземпляр имеет на нем узел веб-сервера. Когда я пытаюсь поразить свой веб-сайт, я получаю сообщение об ошибке в своем браузере. Ошибка:

Connect: Connection refused

Я подтвердил, что могу пинговать машину. Но когда я вхожу http://[ipAddress] или http://[ipAddress]:8080 в моем браузере, я получаю ошибку выше. Когда я запускаю веб-сервер узла, он говорит:

Server listening on 8080

Я реализовал переадресацию портов с помощью следующей команды:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 
-j REDIRECT --to-port 8080

Я считаю, что я правильно открыл брандмауэр, используя следующие команды:

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

Я застрял. Я не знаю, почему я получаю «Соединение отказано». Я искренне буду признателен за любую помощь или идеи, которые кто-то может предоставить. На данный момент я не уверен, что это сообщение поступает от Ubuntu или с сервера Node. Помимо этого, я не знаком с тем, как отслеживать эту проблему.

Спасибо за помощь. Это очень много значит для меня.


6
2018-04-21 15:32


Источник


Убедитесь, что порт 80 разрешен в группе безопасности вашего экземпляра - LinuxDevOps


Ответы:


Ваш сервер, скорее всего, не прослушивает [ipAddress]:8080 скорее всего, только прослушивание на localhost: 8080. Вы можете проверить это, используя NetStat Вам необходимо настроить сервер для прослушивания всех / соответствующих IP-адресов. Несомненно, как это сделать, в документации.


2
2018-04-21 15:45



Привет, Иэн, Спасибо за ваш ответ. Я запустил netstat и заметил, что в списке нет ни 80, ни 8080. Я вижу три записи tcp. Однако я не понимаю, что я должен искать. Знаете ли вы о хорошей ссылке, которая объясняет, что я ищу? Я исторически не парень linux. - user3284007
Обратите внимание, что я также запускал «netstat -a | egrep« Proto | LISTEN »и не видел мой узел в списке. - user3284007
@ user3284007: попробуйте netstat -tnl | grep 8080, - Iain


Вы хотите заполнить адрес сервера чтобы он прослушивал правильный сетевой интерфейс:

http.createServer(function (req, rsp) () {
    ...
}).listen(serverPort, serverAddress);

Также убедитесь, что с Amazon EC2 в консоли управления у вас есть Группа безопасности прикрепленный к вашему экземпляру машины, который разрешает доступ к этому порту. (Эти группы безопасности позволяют настроить EC2-брандмауэр.)


1
2018-06-08 10:09





У меня была такая же проблема с моим приложением ExpressJS, и это не ваше перенаправление. Я взломал iptables и netstat в течение длительного времени, пока не понял, что у меня есть переменная HOST в файле server.js, установленном на localhost, Вот мой нерабочий код:

app.listen(PORT, 'localhost', function(err) {
    if (err) return console.log(err);
    console.log("Listening at http://localhost:%s", PORT);
});

Просто добавьте переменную хоста

var HOST = 'actual_server_goes_here...';

И затем сделайте следующее:

app.listen(PORT, HOST, function(err) {
  if (err) return console.log(err);
  console.log("Listening at http://%s:%s", HOST, PORT);
});

Надеюсь это поможет :)


1
2017-10-19 15:35





вам нужно использовать свой PRIVATE IP для прослушивания. Частный IP-адрес экземпляра (несколько IP-адресов перечислены, если в экземпляр присутствует более одного сетевого интерфейса). он отображается в консоли управления EC2, на каждый экземпляр


0
2018-02-25 10:26