2013-11-15 2 views
1

Я попытался запустить сервер Hello World на экземпляре AWS t1.micro. Что я сделал:Узел JS Сервер «Hello world» на AWS

  • Я установил узел на AWS
  • писал что-то вроде этого:


require("http").createServer(function(request, response){ 
     response.writeHeader(200, {"Content-Type": "text/plain"}); 
     response.write("Hello World!"); 
      response.end(); 
}).listen(8080); 


- запустить его на AWS: node test_server.js

Теперь я пытаюсь отправьте запрос с моей локальной машины на сервер следующим образом:

curl http://NAME:8080 где NAME является общедоступным DNS-именем из консоли aws, но ничего не происходит. Что я забыл? Или что я сделал неправильно

Я попытался найти какой-то учебник, но они описывают, как запустить это на локальной машине или предложить установить Ngnx. Но я ищу минималистский пример

ответ

3

Вам необходимо сообщить Amazon о разрешении входящего трафика на порт 8080 в ваш экземпляр. См. Документацию для step by step instructions.

Короче:

  • Перейти к консоли Amazon EC2, нажмите на Instance и открыть Group Security панель настроек
  • Добавить новое правило, разрешающее входящий трафик с любого IP (0.0.0.0/0) на порту 8080
  • Применить изменения: теперь веб-сервер узла должен иметь возможность обслуживать HTTP-запросы.
+2

Или вы можете изменить слушать (8080) для прослушивания (80) в вашем коде, затем установите группу безопасности, чтобы разрешить через нее хорошо известный HTTP-сервис. –

+0

@CharlesEngelke - вы должны использовать 'sudo node test_server.js', чтобы заставить его работать на порт 80, иначе узел выдает ошибку. Возможно, это можно будет изменить, испортив разрешениями (добавив узел в sudoers и т. Д.). –

2

@Paul прав, но это было лишь частью решения для меня. Я все еще получал «соединение отказался» от локальной машины (удаленный CURL был прекрасен). Итак, еще одна часть этой головоломки была решена путем отключения брандмауэра Unix (в дополнение к конфигурациям групп безопасности AWS), то есть iptables!

Вы управляете CentOS? Попробуйте это:

$ service iptables save 
$ service iptables stop 
$ chkconfig iptables off 

Конечно, отключение брандмауэра и открывая AWS группы консоли безопасности не является хорошей долгосрочной идеей. Правильный способ заключается в использовании iptable, открытый порт 80 для входящих и исходящих, а затем перенаправлять от 80 до Node.js порта (3000 или 1337 или что-то еще):

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000 
$ sudo iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT 
$ sudo iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 

Вы также можете использовать Nginx сделать редирект , Ларный кэш - тоже хороший инструмент, поскольку он значительно снижает нагрузку на процессы Node.js, если у вас много пользователей, попавших на один ресурс/страницу.

Дополнительная информация о AWS и узле.ЯШ:

http://www.lauradhamilton.com/how-to-set-up-a-nodejs-web-server-on-amazon-ec2

Как отключить IPTables на Linux:

http://www.cyberciti.biz/faq/turn-on-turn-off-firewall-in-linux/

Одинаковые на CentOS и Fedora:

http://www.cyberciti.biz/faq/disable-linux-firewall-under-centos-rhel-fedora/