Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 447
Vitaly Avatar asked Oct 28 '11 12:10

Vitaly


People also ask

How do I make node listen on port 80?

const server = http. createServer((req,res)=>{ // Handle request and response }); Specify Port Number and hostname and set the server to listen to it. server.

What port should I use for Express?

javascript - Node. js/Express. js App Only Works on Port 3000 - Stack Overflow. Stack Overflow for Teams – Start collaborating and sharing organizational knowledge.


2 Answers

If you really want to do this you can forward traffic on port 80 to 3000.

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000 
like image 79
Michael Connor Avatar answered Oct 09 '22 00:10

Michael Connor


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

like image 23
Thomas Fritz Avatar answered Oct 08 '22 22:10

Thomas Fritz