我有一台运行CENTOS的VPS,我正在尝试使用Node.js. 我运行了一个在各种端口上正确运行的示例node.js服务器,但每当我尝试在端口80上运行节点时(443的相同错误),我收到以下错误:
root@mic [~/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
显然我执行了两次这个命令,因为: 当我做了一个:sudo iptables -t nat -L,它返回了:
root@mic [~]# 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。
答案 0 :(得分:0)
不要使用Apache,它会为每个请求创建一个线程/进程,而nginx则不会。它类似于nodejs事件循环,其中您有一个需要处理的请求队列,nginx工作进程从队列中获取每个请求并处理它 - 在您的情况下向nodejs服务器发送请求然后等待响应。
永远不要在端口80上使用nodejs,有太多的用例需要处理,而且不需要重新发明轮子