Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in AWS by (19.1k points)

I'm running an instance of Debian on Amazon EC2 with Node.js installed. If I run the code below:

http = require('http');

http.createServer(function (request, response){

  response.writeHead(200, {'Content-Type':'text/plain'});

  response.end('Hello World\n');

}).listen(80);

console.log("Running server at port 80");

I get the output below which tells me there's another process listening at port 80:

Running server at port 80

events.js:72

        throw er; // Unhandled 'error' event

              ^

Error: listen EACCES

    at errnoException (net.js:901:11)

    at Server._listen2 (net.js:1020:19)

    at listen (net.js:1061:10)

    at Server.listen (net.js:1127:5)

    at Object.<anonymous> (/home/admin/nodetests/nodetest.js:6:4)

    at Module._compile (module.js:456:26)

    at Object.Module._extensions..js (module.js:474:10)

    at Module.load (module.js:356:32)

    at Function.Module._load (module.js:312:12)

    at Function.Module.runMain (module.js:497:10)

Now when I check to see if there's a process (as root in case anything is hidden) listening on port 80 using:

netstat -tupln

I get the below output, which tells me there's nothing listening at port 80:

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address       Foreign Address    State        PID/Program name

tcp              0           0  0.0.0.0:22              0.0.0.0:*                 LISTEN   1667/sshd       

tcp6            0           0  :::22                       :::*                          LISTEN   1667/sshd

I should note that the Debian has port 80 open as an inbound rule if that makes a difference.

My question is: What am I doing wrong? How come I can't identify the process listening to port 80? Why is it blocked in Debian? What steps should I take to get the code running correctly?

1 Answer

0 votes
by (44.4k points)

The error code EACCES means that you did not provide proper permissions on that port to run applications. Basically, any port below 1024 in Linux systems require root access. So, make sure to provide and you are good to go.

So, you can direct your application running on port 80 to your application’s port which is greater than 1024 using this:

iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 2500

This will work if your application is running on port 2500.

Related questions

0 votes
1 answer
Want to get 50% Hike on your Salary?

Learn how we helped 50,000+ professionals like you !

0 votes
1 answer

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...