2014-10-07 42 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通常作爲超級用戶進程運行符合此解釋。

相關問題