Я так расстроен ... Я не могу найти в Интернете никакой информации, которая могла бы мне помочь.

Моя установка:

  • Экземпляр 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.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'));
});
3
heckascript 7 Окт 2014 в 10:15

2 ответа

Лучший ответ

Вы можете использовать netstat -tulpn | grep :XX, XX - порт, который вы хотите проверить.

Похоже, вы пытаетесь запустить как http, так и https-сервер на одном и том же порте. удалите бит http.createServer, и все будет в порядке.

3
xShirase 7 Окт 2014 в 06:28

Согласно моему собственному опыту (не на EC2), а также согласно этот комментарий ОП, я готов поспорить, что решение этой проблемы состоит в том, чтобы запустить процесс как sudo - или, если хотите, где-то должна быть группа Linux и разрешения, которые запрещает пользователям, не входящим в группу, подключать процессы к порту 80 или 443, и в этом случае выполнение процесса в качестве суперпользователя будет выполнять работу.

Тот факт, что OP делегировал Nginx задание по подключению к правильному порту и что Nginx обычно запускается как суперпользовательский процесс, соответствует этому объяснению.

0
Community 23 Май 2017 в 12:31