无论端口如何,AWS上的节点EADDRINUSE

时间:2014-10-07 06:15:37

标签: node.js amazon-web-services nginx amazon-ec2 port

我变得非常沮丧......我在网上找不到任何帮助我的信息。

我的设置是:

  • AWS EC2实例
  • Nginx指向127.0.0.1:3000
  • 节点JS v0.10.32
  • 作为守护程序运行的mongoDB进程

我已尝试使用我的公共DNS /公共IP并重新启动nginx,我尝试过端口80,8000,1337等...我试过删除Nginx。 ps aux | grep :3000什么都不返回。 ps aux | grep :80什么都不返回。等...

以下是相关代码:

https.createServer(options, app).listen(app.get('port'), '127.0.0.1', function() {
    console.log('Express server listening on port ' + app.get('port'));
});
http.createServer(function(req, res) {
    res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
  res.end();
}).listen(3000);

无论我使用哪个端口,我都会对sudo node app.jsnode app.js收到同样的错误:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1042:14)
    at listen (net.js:1064:10)
    at net.js:1146:9
    at dns.js:72:18
    at process._tickCallback (node.js:419:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:906:3

我确实让这个工作,但我需要将流量重定向到端口443并使用https:

app.listen(3000, '127.0.0.1', function() {
    console.log('Express server listening on port ' + app.get('port'));
});

2 个答案:

答案 0 :(得分:3)

您可以使用netstat -tulpn | grep :XX,XX是您要检查的端口。

您似乎正在尝试在同一端口上启动http和https服务器。删除http.createServer位,你会没事的。

答案 1 :(得分:0)

根据我自己的经验(不是在EC2上)以及根据this comment by the OP,我敢打赌,这个问题的解决方案是将过程作为sudo运行 - 或者,如果你想要的话,必须有某个Linux组和权限,以防止非组用户将进程附加到端口80或443,在这种情况下,以超级用户身份运行该进程将完成这项工作。

OP将附加到正确端口的作业委托给Nginx,并且Nginx通常作为超级用户进程运行的事实符合此解释。