Question

Cannot connect to node-app externally

For some odd reason, I cannot connect to my node-app externally, I can’t figure why, please send help! :D

root@gitty:~/gitty.me# node server/ &
[1] 6585
root@gitty:~/gitty.me# nListening on { address: '0.0.0.0', family: 'IPv4', port: 3000 }
root@gitty:~/gitty.me# netstat -plnt
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:80              0.0.0.0:*               LISTEN      3194/nginx -g daemo
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1398/sshd
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      6585/node

Ps. Nginx works, but node doesn’t :c

Sincerely, Mads Cordes

Subscribe
Share

Submit an answer
You can type!ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

@Mobilpadde

Posting this as a separate reply since it’ll be a little lengthy :-).

The default server block for NGINX will be located at:

/etc/nginx/sites-available/default

The above file, with NGINX running, is why you’ll see some sort of response to incoming requests after pointing your domain to the IP of the Droplet.

You’ll need to modify that file to suit your specific needs and proxy requests to your NodeJS app. To start, I’d recommend wiping that file clean.

To do that, we can run:

truncate -s 0 /etc/nginx/sites-available/default

That’ll result in an empty file we can now setup to respond to requests for your application. So let’s go ahead and edit it.

nano /etc/nginx/sites-available/default

Within that file, paste in:

upstream @backend {
    server 127.0.0.1:3000;
}

server
{
    listen 80;
    listen [::]:80;
    server_name domain.com www.domain.com;

    location /
    {
        proxy_pass http://@backend;
        
        proxy_buffers 16 32k;
        proxy_buffer_size 64k;
        proxy_busy_buffers_size 128k;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_connect_timeout 59s;
        proxy_hide_header X-Powered-By;
        proxy_http_version 1.1;
        proxy_ignore_headers Cache-Control Expires;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
        proxy_no_cache $http_pragma $http_authorization;
        proxy_pass_header Set-Cookie;
        proxy_read_timeout 600;
        proxy_redirect off;
        proxy_send_timeout 600;
        proxy_temp_file_write_size 64k;
        proxy_set_header Accept-Encoding '';
        proxy_set_header Cookie $http_cookie;
        proxy_set_header Host $host;
        proxy_set_header Proxy '';
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Original-Request $request_uri;
    }
}

You’ll need to modify:

server_name domain.com www.domain.com;

…and replace domain.com with your actual domain name.

Once you’ve done that, save the file and restart NGINX using:

service nginx restart

That should get things working for you without having to attach the port to the URL.

@Mobilpadde

We’d need to take a look at the server block you configured for NGINX and your NodeJS app.

Without a properly configured server block that proxies requests on port 80 to 3000, the only way to access your application from the browser will be by appending the port to the end of the URL or IP.