Host Multiple Ghost Blogs on One Server: 6 Powerful Nginx Setup Steps

This article explains how to host multiple Ghost blogs on one server using Nginx, covering ports, domains, and performance optimization. Ideal for developers and VPS users who want to scale projects without extra infrastructure costs.
10 February 2026
How to Host Multiple Ghost Blogs on One Server with Nginx

Host Multiple Ghost Blogs on One Server with Nginx

Ghost is a great blogging platform – easy to use, quick for publishing, and pleasing. But, usually, it’s one server, one Ghost install, one site. What if you want to run a few sites without paying for lots of machines?

This guide will show you how to run multiple Ghost blogs on one server. Each blog will have its own domain, and Nginx will be the traffic controller, sending visitors to the right Ghost setup.

I’ll use two domains as an example, but you can use this for more, as many as your server can handle.

Once your Ghost blogs are up and running, you might also want to improve the user experience on each site by adding a Table of Contents in Ghost CMS: 4 Easy Steps (No Theme Edit) to your articles.

What You Need Before We Start

Before you start changing things, make sure you have these ready:

  • A new server you can access online
  • Ghost is already set up and running (you need at least one working install)
  • Two domain names are pointing to your server’s IP address
  • Root access (or sudo privileges)

If you don’t have Ghost installed, do that first. This guide assumes Ghost is already up and running.

SPONSORED

Running multiple Ghost installs on one server requires solid performance — especially NVMe storage, stable networking, and full root access.

If you’re looking for an affordable EU-based VPS, Senko Digital offers:

  • VPS locations in Germany, Finland, and the Netherlands
  • Fast NVMe storage
  • Full root access
  • Quick server deployment
  • 24/7 support
  • 99.9% uptime guarantee
  • Basic DDoS protection (Germany location)

Step-by-Step: Host Multiple Ghost Blogs on One Server

Step 1 – Temporarily Stop Ghost and Nginx

Before moving folders or splitting things up, let’s shut everything down This can prevent errors that will cause problems.

Stop Ghost:

service ghost stop

Stop Nginx:

service nginx stop

All clear! Now we can move things around.


Step 2 – Make Nginx Route Traffic to the Right Place

Right now, Nginx probably sends everything to one place. That works for one Ghost blog, but not for two. The fix is to give Nginx separate server blocks – one for each domain – so it can route traffic based on the domain name (server_name).

Go to the directory where your Nginx configs are:

cd /etc/nginx/sites-enabled

Rename the Ghost config to match your first domain (I’ll use example names below), and then copy it for the second domain:

mv ghost firstsite.confcp firstsite.conf secondsite.conf

Set Up the First Domain

Open the first file:

nano firstsite.conf

Set server_name to your first domain:

server_name firstsite.com;

Save it and close the file.

Set Up the Second Domain + Use a Different Port

Now open the second config:

nano secondsite.conf

Update the server_name:

server_name secondsite.com;

Here’s the important part: your second Ghost install needs to listen on a different port. If it doesn’t, both domains will go to the same Ghost process.

Find the proxy_pass line and change it to a free port (like this):

proxy_pass http://localhost:2777;

Save and exit.

Restart Nginx:

service nginx restart

Now, Nginx can send traffic to two different ports based on the domain name. Next, let’s set up Ghost to match.


Step 3 – Make Two Ghost Folders in /var/www

Go to the web root:

cd /var/www

Make a folder for each blog:

mkdir firstsite.commkdir secondsite.com

Now you need two Ghost installations. The easiest way is to copy the existing Ghost folder.

Copy Ghost to the first site’s folder:

cp -r ghost firstsite.com

Move the original Ghost folder to the second site’s folder:

mv ghost secondsite.com

Now you have:

  • /var/www/firstsite.com/ghost
  • /var/www/secondsite.com/ghost

Two separate installs, two sets of configs, and two separate blogs.


Step 4 – Change Ghost’s Settings for Each Domain

Ghost needs to know its public URL. If it doesn’t, you’ll have broken links and other annoyances.

First Site: Set the URL

Edit the first site’s Ghost config:

nano /var/www/firstsite.com/ghost/config.js

Find the production section:

production: {

Update the url value:

production: {  url: 'http://firstsite.com'}

Save and exit.

Second Site: Set the URL and Port

Now edit the second site’s config:

nano /var/www/secondsite.com/ghost/config.js

In the production section, set the URL:

production: {  url: 'http://secondsite.com'}

Then, find the server: {} section inside production and change the port to the one you used in Nginx (2777 in the example):

port: '2777'

Save and exit.

Now your second Ghost install will use its own port.


Step 5 – Set Up Upstart Scripts to Control Each Ghost Blog

Managing multiple Ghost blogs can be a hassle if they all use the same controls. Upstart scripts give you separate controls for each site: start, stop, restart, etc.

If you have a System V init script at /etc/init.d/ghost, remove it to avoid issues:

rm /etc/init.d/ghost

Go to the Upstart config directory:

cd /etc/init

Make the First Upstart Script

Create a new file:

nano ghost-firstsite.conf

Add this:

# ghost-firstsitestart on startupscript  cd /var/www/firstsite.com/ghost  npm start --productionend script

Save and exit.

Copy It for the Second Site

Copy the first script:

cp ghost-firstsite.conf ghost-secondsite.conf

Edit the second one:

nano ghost-secondsite.conf

Change it to point to the second directory:

# ghost-secondsitestart on startupscript  cd /var/www/secondsite.com/ghost  npm start --productionend script

Save and exit.


Step 6 – Start Both Ghost Blogs

Start each service:

service ghost-firstsite startservice ghost-secondsite start

Open both domains in your browser. If everything’s set up, you should see the Ghost welcome page on each one – separately.

To make an admin user for each blog, go to:

  • firstsite.com/ghost/signup
  • secondsite.com/ghost/signup

Post something on each site to test. If the posts show up correctly and don’t mix between domains, you’ve done it!


Wrapping Up

You now have two different Ghost blogs running on one server. Nginx sends traffic based on the domain name, and each Ghost install has its own folder and port.

Want more blogs? Just repeat the steps:

  • New domain → new Nginx server block
  • New local port → new Ghost config port
  • New directory → new Upstart script

Just remember that each additional blog uses more server resources.


FAQ Hosting Multiple Ghost Blogs on One Server

1. Can I run more than two Ghost blogs on one server?

Yes. You can run as many Ghost blogs as your server resources allow. Each blog needs its own domain, port, folder, and process.

2. Do all Ghost installs need different ports?

Yes. Each Ghost instance must listen on a unique local port so Nginx can route traffic correctly based on the domain.

3. Will posts or users mix between sites?

No. Each Ghost blog has its own installation and database, so content and users stay completely separate.

4. Can I use SSL (HTTPS) with multiple Ghost blogs?

Absolutely. You can use Let’s Encrypt with Nginx to issue separate SSL certificates for each domain.

5. Does this work with Ghost CLI installs?

This guide assumes a manual or older setup. If you’re using Ghost CLI, multi-site hosting is still possible but requires separate system users or Docker-based setups.

6. What happens if one Ghost blog crashes?

Only that specific blog goes down. The other Ghost instances will keep running normally.

7. How much RAM do I need?

A small Ghost blog typically needs around 300–500 MB of RAM. Add more memory as you add more sites, especially if traffic increases.

8. Is Docker a better option for this?

For many sites or long-term scaling, yes. Docker or Docker Compose can simplify isolation, upgrades, and maintenance—but this Nginx-based setup is perfectly fine for small to medium projects.

Leave a Reply

Your email address will not be published.

Don't Miss

How to Stop Malicious Bots with Zip Bombs

Stop Malicious Bots: 7 Powerful Zip Bomb Tricks That Actually Work

A controversial but clever way to fight malicious bots by
How to Run n8n and Supabase on One VPS with Coolify

Run n8n and Supabase on One VPS: Ultimate Coolify Setup Guide

Learn how to self-host n8n and Supabase on one VPS