AWS上的节点JS“Hello world”服务器

时间:2013-11-15 09:55:49

标签: javascript node.js amazon-web-services

我尝试在AWS t1.micro实例上运行“Hello world”服务器。我做了什么:

  • 我在aws上安装了Node
  • 写了这样的话:


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是来自aws控制台的公共DNS名称,但没有任何反应。 我忘记了什么?或者我做错了什么

我试图寻找某种教程,但他们描述了如何在本地机器上运行它或建议设置Ngnx。但我寻找极简主义的例子

2 个答案:

答案 0 :(得分:3)

您需要告知亚马逊将8080端口上的入站流量授权给您的实例。请参阅step by step instructions的文档。

简而言之:

  • 转到Amazon EC2控制台,单击 Instance 并打开 Security Group 首选项面板
  • 添加新规则,授权端口8080上任意IP(0.0.0.0/0)的入站流量
  • 应用更改:Node Web服务器现在应该能够提供HTTP请求。

答案 1 :(得分:2)

@Paul是对的,但这只是解决方案的一部分。我仍然得到了#34;连接被拒绝"从本地机器(远程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进行重定向。 Varnish Cache也是一个很好的工具,因为如果你有很多用户点击一个资源/页面,它会大大减少Node.js进程的负载。

进一步阅读AWS和Node.js:

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

如何在Linux上禁用iptables:

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/