我变得非常沮丧......我在网上找不到任何帮助我的信息。
我的设置是:
我已尝试使用我的公共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.js
和node 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'));
});
答案 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通常作为超级用户进程运行的事实符合此解释。