Question

Two different Node apps, with two different domains, in one droplet.

Ok, for instance, I have two apps running on two different ports, using forever. Using a third app, how could you make example1.com go to 127.0.0.1:3000 and example2.com go to 127.0.0.1:3001? I’ve seen answers talking about vhosts, but exclusively using nginx, and what should I do, especially regarding DNS?

PS: most answers tend to be using subdomains, which isn’t the case. It’s two completely unrelated domains. Also, both apps have very low visitations, so having multiple apps hosted on the same droplet shouldn’t be a problem.


Submit an answer


This textbox defaults to using Markdown to format your answer.

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

Sign In or Sign Up to Answer

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.

The previous accepted answer included a simple configuration using HTTP. I’ve added on this repository (https://github.com/FranciscoKnebel/nginx-reverseproxy) a configuration using HTTP2, which also includes a short instruction set on how to setup SSL with Let’s Encrypt.

Ok, this is the solution using nginx: as @jtittle mentioned, you will set up a server to act as proxy. The link provided (https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04) shows pretty much everything you need to know about how to set it up. Only difference, to make the two domains work your /etc/nginx/sites-available/default code would look something like this:

server {
    listen 80;

    server_name example1.com;

    location / {
        proxy_pass http://yourDropletAddress:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

server {
	listen 80;

	server_name example2.com;
    location / {
        proxy_pass http://yourDropletAddress:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }	
}

For the DNS, you need to go to here, then Domains, and then input your domain and chosen droplet. Inside this change, you need to add the digitalOcean nameservers and voala, it works!

I’m still looking for a more Node approach, but it is functional.

Edit1: this implementation, if you use your droplet IP on the proxy, makes it so you can still access a port, so you could still go to example1.com:8080. The solution with Node is easy: Use localhost as “yourDropletAddress”. On your apps, in the app.listen command, specify localhost as your hostname. That will make it so only the proxy can access those ports to redirect. Example usage:

var express = require("express");
var app = express();
var port = 8080;
//do all the routing and etc

var listener = app.listen(port, 'localhost', function() {
    console.log("Listening on port " + listener.address().port);
});

@kyozeus

Using NGINX, please take a look at the guide below and search for the heading “Set Up Reverse Proxy Server”, which will provide you with exactly what you need to setup multiple domains using NGINX, which will proxy requests to your NodeJS application.

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04

Essentially NGINX will handle the initial request on Port 80 and then proxy it over to the port used by your NodeJS application.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel