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.

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.

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.

i have two different application in one application server i have two domains how to access two applications using one port num(8080) ? like: example1.com-----app1 example2.com-----app2

This comment has been deleted