2014-06-26 104 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端口,有太多的用例来处理,没有必要推倒重来