2013-11-15 62 views
1

我試圖在AWS t1.micro實例上運行「Hello world」服務器。我做了什麼:AWS上的節點JS「Hello world」服務器

  • 我安裝節點在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是來自aws控制檯的公共DNS名稱,但沒有任何反應。 我忘了什麼?或者我做錯了什麼

我試圖尋找某種教程,但他們描述瞭如何在本地機器上運行或建議安裝Ngnx。但我尋找極簡主義的例子

回答

3

您需要告訴Amazon授權8080端口上的入站流量給您的實例。請參閱step by step instructions的文檔。

簡而言之:

  • 進入亞馬遜EC2控制檯,點擊實例並打開安全組偏好窗格
  • 添加新的規則從任何IP授權入站流量(0.0.0.0/0)在端口8080上
  • 應用更改:Node Web服務器現在應該能夠提供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的做重定向。 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/