2014-10-07 44 views
1

我越来越沮丧......我无法在网上找到任何信息来帮助我。AWS上的节点EADDRINUSE无论端口

我的设置是:

  • 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 

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

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

回答

2

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

看来你试图在同一个端口启动一个http和一个https服务器。删除http.createServer位,你会没事的。

+0

忘了提及我正在使用这个:'app.set('port',process.env.PORT || 443);' – EmmaGamma 2014-10-07 06:31:25

+0

好吧,启动你的应用并尝试'netstat -tulpn | grep:3000' – xShirase 2014-10-07 06:34:23

+0

该应用程序不会启动,这就是问题所在。 – EmmaGamma 2014-10-07 06:34:47

0

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

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

相关问题