Node.js + Express: приложение не начнет прослушивать порт 80 - PullRequest
36 голосов
/ 28 октября 2011

Я создаю и запускаю приложение, подобное этому:

express -s -t ejs
npm install express
npm install ejs
node app.js

, и оно работает (на порту 3000).Но когда я иду и меняю порт на 80, то при запуске node app.js выводится следующее:

node.js:198
throw e; // process.nextTick error, or 'error' event on first tick
          ^
TypeError: Cannot call method 'getsockname' of null
at HTTPServer.address (net.js:746:23)
at Object.<anonymous> (/var/www/thorous/app.js:35:67)
at Module._compile (module.js:432:26)
at Object..js (module.js:450:10)
at Module.load (module.js:351:31)
at Function._load (module.js:310:12)
at Array.<anonymous> (module.js:470:10)
at EventEmitter._tickCallback (node.js:190:26)

Это работает и на моем ноутбуке, но не на моем экземпляре Amazon EC2, где открыт порт 80.Можете понять, что не так.Любые советы?

Ответы [ 3 ]

74 голосов
/ 20 декабря 2012

Если вы действительно хотите это сделать, вы можете перенаправить трафик через порт 80 на 3000.

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
62 голосов
/ 28 октября 2011

Вы запускаете свое приложение как root?Потому что меньшие номера портов требуют привилегий root.Может быть, работает sudo node app.js?

НО, вы НЕ должны запускать какое-либо приложение node.js на порту 80 с правами суперпользователя !!!НИКОГДА!

Я предлагаю запустить nginx в качестве обратного прокси-сервера для вашего приложения node.js, работающего на порту, например, 3000

0 голосов
/ 28 октября 2011

Возможно, что-то еще работает на порте 80 ранее?

Возможно, вы сканируете порт и подтверждаете, что он еще не используется?

nc -z <<your IP>> 80
...