2014-06-26 102 views
0

我有一臺運行CENTOS的VPS,我正在試驗Node.js. 我跑了一個例子Node.js的服務器上運行正常的各個港口,但每當我試圖運行在80端口節點(443同樣的錯誤)我得到以下錯誤:無法在端口80或443上運行node.js webservice

[email protected] [~/Projects/NodeTutorial2]# node index.js 
Server running on port 80. 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: listen EADDRINUSE 
    at errnoException (net.js:883:11) 
    at Server._listen2 (net.js:1021:14) 
    at listen (net.js:1043:10) 
    at Server.listen (net.js:1109:5) 
    at Object.<anonymous> (/root/Projects/NodeTutorial2/index.js:8:4) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 

我試圖重定向80端口3000通過做:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000 

顯然我執行該命令兩次,因爲: 當我做了:命令iptables的NAT -t -L,它返回:

[email protected] [~]# sudo iptables -t nat -L 
Chain PREROUTING (policy ACCEPT) 
target  prot opt source    destination 
REDIRECT tcp -- anywhere    anywhere   tcp dpt:http redir ports 3000 
REDIRECT tcp -- anywhere    anywhere   tcp dpt:http redir ports 3000 

Chain POSTROUTING (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 

但無濟於事,我仍然得到同樣的錯誤。

我試圖用netstat -tulpn查看端口80上運行的是什麼? grep:80命令並返回:

tcp  0  0 0.0.0.0:80     0.0.0.0:*     LISTEN  477/httpd 
tcp  0  0 :::80      :::*      LISTEN  477/httpd 

所以我殺死了端口80上運行的進程,然後立即啓動了我的VPS。

什麼端口應該運行我的node.js webservice?

根據我的膩子設置,我正在訪問的端口是22端口,所以我不明白那裏發生了什麼。 此外,我不打算以root身份運行我的web服務。 我創建了另一個用戶,其權限較小,可以運行node.js webservice。

+2

Apache或一些web服務器80(可能443)上運行。 – Joe

+0

是的,但我殺了80端口,它立即引導我離開我的膩子連接。也許我應該嘗試殺死443,看看會發生什麼。 – ConfusedDeer

+0

httpd和sshd是完全不同的東西(正如您注意到的,端口22與端口80/443)。你應該記錄你實際做了什麼來「殺死」httpd來啓動。 – Joe

回答

0
  1. 安裝到的NodeJS使用端口8000
  2. nginx的安裝和設置它爲您的應用程序的NodeJS反向代理。

不要使用Apache,它會爲每個請求創建一個線程/進程,而nginx不會。它的工作方式類似於nodejs事件循環,其中有一個需要處理的請求隊列,nginx工作進程從隊列中接收每個請求並處理它 - 在您的情況下,向nodejs服務器發送請求,然後等待響應。

,從不使用上的NodeJS 80端口,有太多的用例來處理,沒有必要推倒重來