Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
Skip to content
World desk13 min

How to Host Multiple Ghost Blogs on One VPS with Nginx

Run several Ghost publications safely on one VPS by isolating every installation, database, service and port, then routing each domain through its own Nginx server block.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Yes—you can run several Ghost publications on one VPS. The reliable design is one independent Ghost installation per blog, with its own directory, database credentials, service identity, local port and canonical URL. Nginx listens publicly on ports 80 and 443, selects a server block from the requested domain, terminates HTTPS and proxies the request to the matching local Ghost process.

This arrangement keeps upgrades, failures, backups and redirects attributable to one publication instead of coupling every blog to a shared process. It also stays within Ghost’s supported boundary: one Ghost instance per site, rather than a load-balanced cluster of Ghost nodes.

As an Amazon Associate I earn from qualifying purchases.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What the multi-blog architecture looks like

Each domain is an independent Ghost application. For example, news.example might live in /var/www/news and listen on 127.0.0.1:2368, while journal.example lives in /var/www/journal and listens on 127.0.0.1:2369. Neither process is exposed directly to the internet. Nginx is the only public listener and chooses the upstream from the hostname in the request.

Layer Per-publication requirement Why it matters
Domain One DNS record for each blog domain or subdomain Nginx uses the requested host to select the correct server block.
Ghost files Separate Ghost-CLI directory containing its own content, configuration, current release and system files Updates, themes and media cannot overwrite another publication.
Database Separate MySQL database and credentials A migration or accidental query is confined to one publication.
Process Distinct systemd service and local listening port Nginx can route precisely and restart one blog without stopping the others.
Public URL One canonical HTTPS URL in that installation’s Ghost configuration Ghost generates links, redirects and asset URLs consistently.
TLS Certificate covering the exact domain in each Nginx server block Browsers receive the certificate that matches the hostname they requested.

Ghost’s clustering guidance says it does not support load-balanced clustering or multi-server setups of any description and that there should be only one Ghost instance per site. Running several independent sites on one machine is different: each publication still has exactly one Ghost instance. When traffic grows, place caching or a CDN in front of the sites rather than adding a second Ghost node for the same publication.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.

Choose a supported VPS baseline

Ghost’s official production guidance lists Ubuntu 24, Node.js 22 LTS, MySQL 8.0, Nginx, systemd, HTTPS, a non-root operating user and a server with at least 1GB of memory. Treat 1GB as the documented minimum baseline for a server, not as a promise that any particular number of blogs will perform well on it.

Capacity is workload-dependent. Reader traffic, Admin and Content API activity, database size, image and video processing, backup jobs and cache hit rate all change CPU, memory and disk requirements. Ghost does not publish a dated benchmark that maps a VPS size to a fixed number of independent blogs. Start with measured resource headroom and increase the VPS when swap activity, database latency or request queues become persistent.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Prepare the operating system

  1. Provision an Ubuntu 24 VPS with a static public address and enough disk for every publication’s content, database, logs and backups.
  2. Create a normal administrative account and use sudo for system changes. Do not run Ghost-CLI installation commands as root; Ghost’s production setup expects a non-root user.
  3. Update the operating system and install the supported Nginx and MySQL packages. Install Node.js 22 LTS using a maintained distribution method, then verify the resulting node and npm versions.
  4. Install Ghost-CLI globally with npm, then confirm that the ghost command is available to the non-root account.
  5. Open TCP ports 80 and 443 in the VPS firewall. Keep each Ghost local port bound to loopback so it is not directly reachable from the public internet.

Package names and repository steps can change between Ubuntu releases. Verify that the installed Node.js major version is 22 LTS and that MySQL is 8.0 before beginning a production installation; mixing unsupported versions can make Ghost-CLI checks fail or leave you outside Ghost’s documented baseline.

Point every domain at the VPS first

Create an address record for every publication before requesting certificates. An apex domain normally uses an A record such as example.com → 203.0.113.10; a subdomain such as journal.example.com can use an A record or a CNAME according to your DNS provider. Replace the example address with the VPS’s real public address.

Check propagation from more than one network and confirm that each hostname resolves to this VPS. A certificate request made while DNS still points elsewhere will fail or issue a certificate from the wrong machine. If you use IPv6, ensure the AAAA record also reaches the VPS; an incorrect AAAA record can make some visitors bypass the working IPv4 configuration.

Create the first Ghost installation

Use one directory per publication. The exact path is your operational choice; the examples below use /var/www/news and /var/www/journal. Do not run two installations from the same directory.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
  1. Make the directory and assign it to the non-root account that will perform the installation: sudo mkdir -p /var/www/news, followed by the appropriate ownership command.
  2. Change into that directory: cd /var/www/news.
  3. Run ghost install. During setup, provide the production URL as the publication’s final HTTPS address, for example https://news.example.com.
  4. Allow Ghost-CLI to perform the setup stages when you want the standard automated path. It can create the MySQL database and user, write Nginx configuration, request Let’s Encrypt TLS through acme.sh, run migrations, create the low-privilege service user and systemd unit, and start Ghost.
  5. When prompted for an administrator account, use a unique mailbox and a long password. Confirm that the installer reports a running service before moving to the second site.

Ghost-CLI’s generated layout keeps the configuration, content, current version, system files and installed versions inside the installation directory. Preserve that boundary when copying files or restoring a backup. Manual file operations performed as root can change ownership and prevent the service from reading themes, images or configuration.

Repeat the installation for each publication

For the second blog, create a new directory such as /var/www/journal, enter it and run ghost install again with https://journal.example.com as its URL. Give it a different MySQL database and credentials. Ghost-CLI normally detects the new directory as a separate installation and creates its own systemd and Nginx configuration, but inspect the generated values before accepting them.

Do not copy the first site’s config.production.json into the second site. The URL, database name, credentials, mail settings and server port belong to one publication. If you use a scripted deployment, keep those values in separate protected environment or secret files.

Let Ghost-CLI automate setup—or stage it deliberately

The all-in-one ghost setup path is convenient when DNS and firewall settings are already correct. It runs the database, Nginx, SSL, Linux-user, migration and systemd stages in a documented sequence. For a controlled rollout, run stages individually and verify each result before continuing.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Approach Best for Checks to perform
Automated setup A new site with standard Ubuntu, MySQL, Nginx and systemd settings Confirm the requested domain, database name, generated server block, certificate name and service status.
Staged setup Existing Nginx policies, separate database administration or a change-controlled server Run and document each database, Nginx, SSL, user, migration and systemd stage; test before enabling the next stage.
Manual Nginx/systemd work Only when Ghost-CLI’s generated files conflict with an established platform Reproduce the required proxy headers, URL, permissions, restart policy and boot activation yourself.

Automation does not remove the need to inspect isolation. After each installation, record its service name, local port, database credentials location and canonical URL. Those four values are the quickest way to diagnose a cross-site routing error.

Assign ports and verify service identities

Every Ghost process needs a distinct local port when several installations share one VPS. The particular numbers are not prescribed by Ghost; the following are examples only:

Rank #3
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
  • news.example.com → 127.0.0.1:2368
  • journal.example.com → 127.0.0.1:2369
  • docs.example.com → 127.0.0.1:2370

Ghost-CLI may choose or record a port during installation. Do not assume the default is free. Inspect each installation’s production configuration and systemd unit, then verify that only the intended service is listening on that port. A distinct process identity and service unit are implementation requirements for independent installations, even though Ghost’s documentation does not prescribe a single multi-site port plan.

Use systemd’s normal status and journal commands to check a service, substituting the actual unit name shown by Ghost-CLI:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo systemctl status ghost-news
sudo journalctl -u ghost-news -n 100 --no-pager
sudo systemctl is-enabled ghost-news

The final command should report that the site is enabled for boot. Repeat these checks for every blog. A failed process should be restartable without restarting unrelated publications.

Configure Nginx routing for multiple domains

Nginx needs one server block per public domain or deliberate redirect domain. Each block terminates TLS and proxies to exactly one local Ghost address. The essential headers preserve the client IP, original protocol and requested host.

server {
listen 80;
server_name news.example.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name news.example.com;

ssl_certificate /etc/letsencrypt/live/news.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/news.example.com/privkey.pem;

client_max_body_size 50m;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}

Create a second pair of blocks for journal.example.com, change the certificate paths and set proxy_pass to the second site’s port, such as http://127.0.0.1:2369. Keep the Host header intact so Ghost sees the domain the visitor requested and can apply the correct canonical URL.

Why the forwarded protocol header is critical

Nginx handles HTTPS at the edge, but the connection from Nginx to Ghost is usually plain HTTP on loopback. Setting X-Forwarded-Proto https tells Ghost that the original request was secure. If the header says http while the Ghost URL is HTTPS, Ghost can redirect to HTTPS repeatedly, producing an infinite redirect loop. If you place another proxy in front of Nginx, pass and validate the original protocol deliberately rather than blindly overwriting it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.

Set upload limits for your editorial workflow

Nginx’s default request-size limit may reject large images, theme archives, imports, audio or video before Ghost receives them. The example uses client_max_body_size 50m; choose a value that matches the largest legitimate upload and your available disk and backup capacity. Increasing the limit does not increase PHP-style memory limits—Ghost still needs enough memory and processing time for the file, and the browser may time out on a slow connection.

Validate and reload safely

  1. Test syntax with sudo nginx -t. Fix every error before reloading.
  2. Reload without dropping existing connections: sudo systemctl reload nginx.
  3. Request each hostname over HTTP and confirm a single redirect to its HTTPS URL.
  4. Request each HTTPS hostname and verify the certificate subject covers that exact name.
  5. Check that the response body, admin URL and uploaded media belong to the requested publication, not a neighboring one.

Use one canonical URL per Ghost site

Ghost stores a public URL for each installation. Set the value to the final HTTPS address, including the correct hostname and no accidental path prefix, for example https://news.example.com. The Nginx server_name, certificate and Ghost URL must agree.

Never point two unrelated domains at one Ghost process and expect Ghost to behave as two publications. Ghost configuration has one public URL. If an alternate domain should lead to the main site, create an explicit Nginx redirect from the alternate domain to the canonical URL; otherwise give the domain its own Ghost installation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Separate files, databases and permissions

Isolation is more than separate hostnames. Keep each site’s content, configuration, current release and system files in its own Ghost-CLI directory. Use separate MySQL databases and credentials, and restrict credential files so only the service account and approved administrators can read them.

Ghost-CLI creates a low-privilege ghost service user and uses systemd as the default process manager. On a multi-site server, verify whether your chosen Ghost-CLI version reuses that account or creates a distinct identity, then confirm that each systemd unit can read only the files it needs. Separate Linux users are useful for stronger boundaries, but the non-negotiable checks are distinct directories, service units, database credentials, ports and Nginx blocks.

After migrations, theme uploads or restores, inspect ownership and permissions. A common failure pattern is a root-owned file inside content; the site can render existing pages but fail when editors upload an image or activate a theme. Restore ownership to the account used by the Ghost service rather than making the whole tree world-writable.

Backups and restore boundaries

Back up each publication as an independent unit: its MySQL database, Ghost content directory, configuration secrets, themes and integration settings. Label the backup with the site name and date so a restore cannot silently overwrite another blog.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Take database backups on a schedule that matches the publication’s posting frequency.
  • Copy uploaded media and custom themes separately from the database; database-only backups do not contain those files.
  • Store at least one encrypted copy away from the VPS.
  • Test restoring one site into a temporary directory and database, then start it on an unused local port.
  • After a restore, check the canonical URL, file ownership, Nginx block and systemd unit before exposing the site publicly.

Because every installation has its own database and directory, you can restore a damaged publication without rolling back the others. That benefit disappears if all sites share a database or a common content tree.

Test the complete path before launch

Run this checklist for every domain, ideally from a network outside the VPS:

  1. DNS resolves the hostname to the intended VPS address, including any IPv6 record.
  2. Port 80 returns a redirect to the same hostname over HTTPS.
  3. Port 443 presents a certificate valid for the exact hostname.
  4. The home page, an article, the Ghost admin URL and the member or subscription flow—if enabled—load from the correct installation.
  5. An editor can upload a representative image or theme archive within the configured body-size limit.
  6. A service restart brings the site back without affecting another publication.
  7. A VPS reboot starts every enabled Ghost service and Nginx.
  8. Logs identify the correct service when a request fails.

This is an operational acceptance checklist, not a substitute for monitoring. Keep an eye on memory, CPU, disk, database connections, response latency, certificate renewal and backup success after launch.

Troubleshoot the failures that multi-site setups create

Symptom Likely cause Fix
The wrong blog appears Overlapping or incorrect server_name, a default Nginx server block, or two domains proxying to one port Inspect the active Nginx configuration, make each hostname unique and map each block to its installation’s actual local port.
Infinite HTTPS redirects X-Forwarded-Proto is missing or says http while Ghost’s URL is HTTPS Set the header to https when Nginx terminates TLS and ensure Ghost’s configured URL is the same HTTPS address.
502 Bad Gateway The target Ghost service is stopped, listening on another port or bound to a different address Check systemctl status, the service journal and the listening socket; correct proxy_pass and restart only the affected service.
Uploads fail with a size error Nginx’s client_max_body_size is smaller than the file Raise the limit in that site’s server block, run nginx -t, reload Nginx and confirm filesystem ownership.
Certificate warning DNS is not reaching the VPS, ports 80/443 are blocked or the certificate belongs to another hostname Correct A/AAAA records and firewall rules, then request or renew a certificate for the exact domain.
One site affects another Shared directory, database, service identity, port or Nginx block Compare each site against the isolation checklist and separate the shared resource before changing application settings.
Sites become slow under load Insufficient CPU or memory, database pressure, media processing, backups or a low cache hit rate Inspect system and database metrics and logs, add caching or a CDN, and resize the VPS. Do not turn one publication into an unsupported multi-node Ghost cluster.

Plan capacity and operating costs realistically

The documented starting point is a server with at least 1GB of memory. It does not specify how many sites that server can host. A small portfolio of low-traffic blogs may fit, while high-resolution media, busy Admin sessions, newsletters, memberships or simultaneous imports can exhaust the same machine quickly.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Track per-site request volume, database size, disk growth, memory pressure, CPU saturation, background jobs and cache hit rate. Keep enough headroom for deployments, migrations and backups rather than sizing to the average idle load. When one publication has a radically different traffic or risk profile, moving it to another VPS can provide cleaner failure isolation than continually tuning a shared host.

The VPS is only one operating cost. Self-hosting also requires arranging and paying for email delivery, analytics and any CDN or caching service. Budget those services per publication when calculating the real cost of a portfolio.

When this design is the right choice

  • Use one VPS with independent installs when the publications have moderate, predictable traffic and you want centralized patching, monitoring and cost control.
  • Split sites across VPSs when a single publication needs guaranteed resources, separate compliance boundaries or maintenance isolation.
  • Add a CDN or caching layer when origin CPU and bandwidth are the bottleneck but the Ghost application itself remains a single instance per site.
  • Avoid load-balanced Ghost nodes for one site because Ghost’s documented support boundary is one instance per site, not a multi-server cluster.

The practical rule is simple: share the operating system and Nginx edge only when that shared failure domain is acceptable; never share a site’s Ghost process, database, content directory or canonical URL with another publication.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.