У меня есть новая установка экземпляра 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. Кроме того, я не знаю, как отследить эту проблему.
Спасибо за помощь. Это очень много значит для меня.
У меня была точно такая же проблема с моим приложением 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);
});
Надеюсь это поможет :)
Ваш сервер, скорее всего, не слушает [ipAddress]:8080
скорее всего, прослушивает только localhost: 8080. Вы можете проверить это, используя netstat Вам нужно будет настроить свой сервер для прослушивания всех / соответствующих IP-адресов. Без сомнения, как это сделать, будет в документации.
Вы хотите заполнить адрес сервера чтобы он прослушивал правильный сетевой интерфейс:
http.createServer(function (req, rsp) () {
...
}).listen(serverPort, serverAddress);
Также убедитесь в Amazon EC2, что в консоли управления у вас есть Группа безопасности подключен к вашему экземпляру компьютера, который разрешает доступ к этому порту. (Эти группы безопасности позволяют настроить брандмауэр EC2.)
вам нужно использовать свой ЧАСТНЫЙ IP-адрес, чтобы слушать его. Частный IP-адрес экземпляра (отображается несколько IP-адресов, если к экземпляру подключено более одного сетевого интерфейса). он отображается в консоли управления EC2 для каждого экземпляра