Node.js is not accessible from external IPs on Ubuntu

91,017

Solution 1

Thanks for adding the last netstat output, it really helped. You can't access node.js from outside because it is listening on localhost IP i.e 127.0.0.1. You need to configure node.js to listen on 0.0.0.0 so it will be able to accept connections on all the IPs of your machine.

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');

Solution 2

According to your netstat output, port 8080 is open only for 127.0.0.1 which is localhost, hence accessing from the server works (which is localhost), but not from anywhere else.

The right output should look like

0.0.0.0:8080
Share:
91,017

Related videos on Youtube

Mikael Gramont
Author by

Mikael Gramont

Updated on September 18, 2022

Comments

  • Mikael Gramont
    Mikael Gramont over 1 year

    I'm sure this is very noobish, so forgive me. I'm trying to run a node.js server on port 8080 of my ubuntu 10.04.

    Here's the result of iptables -L on the server:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    And here's the result of nmap -p 8080 (edited the ip address because everything is or should be wide open)

    nmap 173.203.xxx.xxx -p 8080 -A
    
    Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
    Interesting ports on xxx (173.203.xxx.xxx):
    PORT     STATE  SERVICE    VERSION
    8080/tcp closed http-proxy
    

    Why on earth is 8080 seen as closed? Adding this did not help:

    iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
    iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT
    

    I'm really confused.

    I'll add this, in case it helps, but I don't know

     netstat -pan | grep 80
    tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2
    

    I can access my regular website running off of port 80 on apache, but the node.js server is inaccessible from outside. Accessing it from the server itself works fine.

    So my question is: how would I go about debugging this? Could there be something else than iptables blocking some ports? How do I find out what it is?

    Any help much appreciated!

    • Atul
      Atul over 7 years
      To those who came here via Google: If you've hosted service on Google cloud and facing this issue, first make sure you've added the port in the exception rules of cloud firewall as well as in the operating systems firewall
  • Mikael Gramont
    Mikael Gramont almost 13 years
    I suspected that, but never came across a 0.0.0.0 before, so disregarded it. I applied your fix, and that did it, thanks!
  • cyberquarks
    cyberquarks over 12 years
    I also have this problem. I followed this code but my nodejs server is still not accessible from outside.
  • Admin
    Admin over 10 years
    Yeah, same here.
  • Jitendra Pancholi
    Jitendra Pancholi over 7 years
    didn't work for me
  • Liran H
    Liran H over 6 years
    Didn't work for me on MacOS Sierra with Node v8.1.3
  • Pankaj Cheema
    Pankaj Cheema about 4 years
    If i have to configure it to get access from a particular single ip like x.x.x.x