AWS上的Node JS“Hello world”服务器

我尝试在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名称,但没有任何反应。 我忘记了什么? 或者我做错了什么

我试图寻找一种教程,但他们描述如何在本地机器上运行或build议安装Ngnx。 但我寻找最简单的例子

您需要通知Amazon将8080端口上的入站stream量授权给您的实例。 请参阅逐步说明的文档。

简而言之:

  • 转到Amazon EC2控制台,单击“ 实例”,然后打开“ 安全组”首选项窗格
  • 在端口8080上添加一个授权来自任何IP( 0.0.0.0/0 )的入站stream量的新规则
  • 应用更改:节点Web服务器现在应该能够提供HTTP请求。

@保罗是对的,但这只是我解决scheme的一部分。 我仍然从本地机器(远程CURL罚款)“连接拒绝”。 所以,另一个难题就是通过closuresUnix防火墙来解决(另外在AWS安全组configuration中),即iptables!

你在运行CentOS吗? 尝试这个:

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

当然,closures防火墙并打开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做redirect。 清漆caching也是一个很好的工具,因为如果你有很多用户打一个资源/页面,它会显着减lessNode.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/