1

我试图在 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。但我寻找极简主义的例子

4

2 回答 2

3

您需要告诉 Amazon 授权 8080 端口上的入站流量到您的实例。有关分步说明,请参阅文档。

简而言之:

  • 转到 Amazon EC2 控制台,单击实例并打开安全组首选项窗格
  • 0.0.0.0/0添加一条新规则,授权来自端口 8080 上任何 IP ( ) 的入站流量
  • 应用更改:Node Web 服务器现在应该能够处理 HTTP 请求。
于 2013-11-15T10:04:09.460 回答
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 进行重定向。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/

于 2014-05-03T04:40:25.250 回答