阿里雲ECS部署node.js及防火牆80端口開啟


第一篇竟然是node.js在阿里雲ECS上的部署遇到的小問題記錄.

很多時候我們排除故障都會掉進小坑,但別小看是小坑,有時候挺煩人挺難纏的,主要還是基礎知識匱乏導致思路混亂造成的,在這里記錄下,給自己提個醒,也為網友指條明路,別像我一樣亂折騰了。

環境描述:

1.阿里雲ECS 單核、1G內存、1M帶寬,基本就是最低配置了

2.阿里雲提供的CentOS 6.5安全加固版

3.node.js 0.10.30

一,安裝過程(盡量精簡了,教程太多,不多說)

#yum install gcc-c++ openssl-devel (根據你的需要安裝或者更新)
#wget http://nodejs.org/dist/node-v0.10.30.tar.gz (nodejs下載地址,現在應該到0.10.32了,實際我沒執行成功,我是本地下載后,sftp上傳到服務器的,沒有深究失敗原因)
#tar –xvf node-v0.10.30.tar.gz
#cd node-v0.10.30
#./configure
#make && make install

以上安裝過程如果你搞不定,那多半是linux基礎太太太太差,補習下吧。

二,測試過程

1.執行node -v,和npm -v 正確顯示了版本號,沒有問題。執行node后,執行console.log('hello');也沒問題。
2.vi 編輯了一個app.js,測試下http是否正常,內容如下:
var http = require('http');

http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end('Hello Aliyun Node.js\n');
}).listen(80,"127.0.0.1");

console.log('NodeJS Server running at http://127.0.0.1:80');

  執行node app.js,即可運行服務器,控制台顯示:

  NodeJS Server running at http://127.0.0.1:80
  用本地瀏覽器訪問阿里雲的地址:
  http://你的IP
  你期待的是:瀏覽器里顯示Hello Aliyun Node.js
  但抱歉,肯定訪問不了。

  以前在本地,不管是Windows環境還是linux環境,這都是最常規的,最多去注意下80端口是否被占用,防火牆是否開放即可。

  

三,排錯過程

  既然是linux,不得不手動開啟80端口的訪問授權。
  查看CentOS防火牆信息:/etc/init.d/iptables status  

  添加對80端口的開放:

  /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

  然后保存規則並重啟防火牆:

  /etc/rc.d/init.d/iptables save

  /etc/init.d/iptables restart

  (注:因為主要是想測試基於node.js的微信公眾平台,而微信公眾平台只接受后端服務器訪問80端口的應用)

  網上百度出來的結果,大部分就到這里了,有一些把對80端口的訪問轉移到其他端口的,我也沒嘗試。
   
  到這里,按常規你是不是覺得應該外網可以訪問服務器了?

  呵呵,也只能呵呵了,我也是這么認為的,結果肯定是無法訪問,腦袋一熱,百度了一個多小時,沒有一個靠譜的說法,也有人說阿里雲ECS屏蔽了80端口的,也有人說權限不夠的(我用root賬戶測試的),調來調去腦袋大了。
  為了確信node.js的http服務是正確運行的,我又用putty開啟了一個控制台連到ECS,在node.js的http服務開啟的狀態下,執行:curl http://localhost,控制台返回了“Hello Aliyun Node.js”信息,同時,我更改了app.js的代碼,在res.end語句后面緊跟着加入了一行:console.log(req.url);,這樣,運行node app.js的控制台下顯示了一個/和/favicon.ico,足夠證明node.js服務器運行正常了。
  最后怎么解決的?呵呵,說是靈光一現也好,說是死馬當活馬醫也好,我突然想到了hosts文件,路由出問題了?
  為了保險我查了一下:cat /etc/hosts,只顯示了本地localhost、127.0.0.1和阿里雲內網IP的綁定,沒有外網地址的配置。
  為了不干擾其它端口上運行的程序,我沒有修改hosts文件,而是更改了app.js代碼:
  createServer(...).listen(80,"阿里雲ECS外網IP");
  或者直接不指定監聽的IP地址也可。

  評論里@木魚朋友提示可以listen 0.0.0.0,但我覺得應該有更好的處理方式,期待下次修正吧。


  ok,一切正常了,當然,隱藏的事情還有很多,是配置hosts文件好?還是在代碼里配置好?有什么利弊?暫且不深究,今天就記錄到這里了。
 



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com