Назад | Перейти на главную страницу

Node.js пример веб-сервера Amazon EC2 - нет результата

Если я запускаю базовый пример nodejs.org на своем сервере Amazon EC2, я получаю сообщение «Сервер работает» в консоли. Но если я попытаюсь открыть его в браузере, используя свой эластичный IP + порт, я не получу результата.

Я думаю, что открыл TCP-порты 22 и 1337 (я не уверен на 100%, потому что я новичок в этом материале).

Предположительно вы имеете в виду этот пример:

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

Сообщение, которое вы бы получили, это Сервер работает по адресу http: //127.0.0.1: 1337 / - выделенная часть здесь является ключевой, т.е. сервер настроен на прослушивание IP-адреса 127.0.0.1 (также известного как localhost) только, в то время как вы пытаетесь просматривать его через свой эластичный IP-адрес.

Соответственно, вы можете достичь своей цели, заменив 127.0.0.1 в listen()заявление с частный / внутренний IP-адрес который был назначен вашему экземпляру EC2.


Вариации

В качестве альтернативы вы можете использовать вместо этого общедоступное / внешнее DNS-имя, которое демонстрирует менее известное динамическое разрешение IP-адреса в зависимости от происхождения DNS-запроса, см., Например, Почему у меня два IP-адреса и два имени хоста?:

Внешнее DNS-имя (которое выглядит как ec2-72-44-45-204.compute-1.amazonaws.com) преобразуется в общедоступный IP-адрес экземпляра за пределами сети Amazon EC2 и частный IP-адрес из сети Amazon EC2. .

Наконец (в соответствии с комментарием cyberx86, спасибо!) Вы может иметь возможность полностью опустить необязательный параметр адреса (но см. ниже), см. server.listen (порт, [имя хоста], [обратный вызов]):

Если имя хоста не указано, сервер будет принимать соединения, направленные на любой адрес IPv4 (INADDR_ANY).

Однако имейте в виду, что это не всегда может быть правильным в расширенных сценариях, поскольку на самом деле может быть доступно более одного сетевого интерфейса после недавнего введения Эластичные сетевые интерфейсы (ENI) в виртуальном частном облаке (VPC), который дает вам возможность создавать дополнительные ENI и присоединять второй ENI к экземпляру (опять же, это в VPC).