Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.
I recently set up a VPS on DigitalOcean to run a few different Node.js scripts under the same domain.
You can’t have two Node.js apps listening on the same port, so you need a reverse proxy. Nginx is commonly used for that.
I set up each Node app to run on its own subfolder, so I had to edit the Nginx configuration:
sudo nano /etc/nginx/sites-available/default
which was this:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name hellonode;
location ^~ /assets/ {
gzip_static on;
expires 12h;
add_header Cache-Control public;
}
location / {
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:3000;
}
}
This configuration allows one Node.js app, running on port 3000, to be the main app served on /.
I wanted an app running under /myservice, so I created a Node app listening on port 3001 and added this configuration:
location /myservice {
rewrite ^/myservice/(.*)$ /$1 break;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:3001;
}
I verified the configuration with:
sudo nginx -t
Then I restarted Nginx:
sudo systemctl restart nginx Lessons in this unit:
| 0: | Introduction |
| 1: | What is a reverse proxy? |
| 2: | How to configure Nginx for HTTPS |
| 3: | ▶︎ A simple nginx reverse proxy for serving multiple Node.js apps from subfolders |