Search code examples
node.jsamazon-ec2portexpress

Node.js + Express: app won't start listening on port 80


I create and launch an app like this:

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

and it works (on port 3000). But when I go and change the port to 80, then running node app.js outputs this:

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)

This works too on my laptop, but not on my Amazon EC2 instance, where port 80 is open. Can figure out what's wrong. Any tips?


Solution

  • Are you starting your app as root? Because lower port numbers require root privileges. Maybe a sudo node app.js works?

    BUT, you should NOT run any node.js app on port 80 with root privileges!!! NEVER!

    My suggestions is to run nginx in front as a reverse proxy to your node.js app running on port e.g. 3000