October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk10 min

How to Host Multiple Ghost and PHP Sites on One VPS With Nginx

A practical architecture and deployment guide for routing multiple independent Ghost and PHP sites through Nginx on one VPS, with HTTPS, isolation, operations and failure recovery.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

One VPS can run several independent Ghost publications and PHP applications when Nginx owns ports 80 and 443 and routes each hostname to the correct local service. Give every site its own directory, database credentials, Ghost process or PHP-FPM target, logs, and HTTPS certificate. The result is economical and straightforward to operate, but all sites still share the VPS’s CPU, memory, storage, and failure domain.

What the finished setup looks like

Nginx is the public edge. A browser sends a request containing a hostname such as news.example.com; Nginx matches that value against a server_name and forwards the request to the appropriate application.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Site type Public endpoint Private target Isolation you should keep
Ghost publication A ghost-a.example.com Ghost process on 127.0.0.1:2368 Separate directory, database, credentials, systemd unit and logs
Ghost publication B ghost-b.example.com Ghost process on 127.0.0.1:2369 Separate directory, database, credentials, systemd unit and logs
PHP application A php-a.example.com Its document root and PHP-FPM socket Separate code root, writable directories, database and logs
PHP application B php-b.example.com Its document root and PHP-FPM socket Separate code root, writable directories, database and logs

Keep virtual-host files in /etc/nginx/sites-available/. Enable only the files you need by symlinking them into /etc/nginx/sites-enabled/. This makes a site easy to disable without deleting its configuration.

Capacity and prerequisites

Ghost’s current hosting guidance lists Ubuntu 24, Node.js 22 LTS, MySQL 8.0, Nginx, systemd, a non-root user, HTTPS, and firewall rules for SSH, HTTP, and HTTPS. It lists at least 1 GB of memory as the baseline for Ghost. Multiple sites may need substantially more: each Ghost process, PHP-FPM workers, databases, web-server buffers, background jobs and the operating system compete for the same RAM.

#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.
  • A VPS with a static IPv4 address and, if used, an IPv6 address.
  • Administrative SSH access and a separate non-root sudo account.
  • DNS control for every hostname.
  • Nginx, systemd, MySQL 8.0 for Ghost, Node.js 22 LTS, and the PHP version and extensions required by each PHP application.
  • UFW or an equivalent firewall allowing SSH only from trusted addresses where possible, plus TCP ports 80 and 443.
  • A backup destination with enough space for uploaded media, databases, application files and multiple backup generations.

Ghost is open source and can be installed on almost any VPS provider. Provider choice does not remove the need to size the machine for the combined workload.

Plan names, directories, ports and credentials before installing

Write an inventory first. Do not reuse a Ghost port, database user, database name or writable directory between publications.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Item Example for site A Example for site B
Ghost directory /srv/ghost/site-a/ /srv/ghost/site-b/
Ghost hostname ghost-a.example.com ghost-b.example.com
Ghost loopback port 2368 2369
PHP document root /var/www/php-a/public/ /var/www/php-b/public/
Database ghost_a ghost_b
Database user Unique long random password Different unique long random password

Use hostnames that will be the canonical URLs of the sites. Keep secrets in a password manager rather than in shell history or shared notes.

Install and run each Ghost publication independently

Install Ghost-CLI once

Install Ghost-CLI globally using the package instructions for the supported Node.js version, then create one directory per publication. Run production installation from inside the intended directory rather than installing several publications into one tree.

sudo mkdir -p /srv/ghost/site-a /srv/ghost/site-b
sudo chown -R $USER:$USER /srv/ghost/site-a /srv/ghost/site-b
cd /srv/ghost/site-a
ghost install

During setup, provide the exact canonical URL, MySQL host and database credentials, and answer yes to the production configuration stages when appropriate. Repeat in /srv/ghost/site-b with a different URL and database account.

What Ghost-CLI configures

Ghost-CLI’s production setup can create the Nginx configuration, Let’s Encrypt SSL configuration, a low-privilege Linux ghost user, and a systemd unit. It supports separate directories and multiple instances. Inspect the generated configuration and confirm the proxy port before enabling or editing neighboring sites; the value may differ from the example.

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.

Ghost documentation describes Ghost as designed to have a reverse proxy in front of it. Preserve the forwarded headers, especially the protocol header, so Ghost knows whether the original request was HTTP or HTTPS.

Configure Nginx for Ghost

A representative block for the first publication is:

server {
    listen 80;
    server_name ghost-a.example.com;

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

    client_max_body_size 50m;
}

For the second publication, copy the structure but change server_name and proxy_pass to the second instance’s actual port, such as 127.0.0.1:2369. The proxy target must be unique per running Ghost process.

X-Forwarded-Proto $scheme is essential. If Nginx tells Ghost that an HTTPS request was HTTP, Ghost can repeatedly redirect the browser to HTTPS. The 50 MB upload limit is only an example; increase it in the relevant server block when imports, themes or media require larger requests, and avoid raising it globally without a reason.

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

Save each file in /etc/nginx/sites-available/, then enable it:

sudo ln -s /etc/nginx/sites-available/ghost-a.example.com /etc/nginx/sites-enabled/ghost-a.example.com
sudo ln -s /etc/nginx/sites-available/ghost-b.example.com /etc/nginx/sites-enabled/ghost-b.example.com

Configure PHP sites with separate roots and PHP-FPM targets

Each PHP hostname needs its own document root. Put public files in a directory such as /var/www/php-a/public and keep configuration files, deployment scripts and other secrets outside that directory whenever the application permits.

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
server {
    listen 80;
    server_name php-a.example.com;
    root /var/www/php-a/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }
}

Replace the socket with the path installed on your distribution, often a versioned name such as /run/php/php8.3-fpm.sock. Never assume a socket path copied from another distribution is valid. The second PHP site gets its own server_name and root. It can use the same PHP-FPM pool only when the resulting permissions and resource sharing are acceptable; a dedicated pool gives better process and limit separation.

Deny direct access to files such as .env, private keys, backups and deployment metadata. Verify that PHP-FPM is running and that the Nginx worker can read application files while only the required upload or cache directories are writable.

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.

Point DNS at the VPS

  1. Create an A record for every hostname pointing to the VPS IPv4 address.
  2. Create AAAA records only when IPv6 is configured and reachable on the VPS; an incorrect AAAA record can make some visitors fail before IPv4 is tried.
  3. Wait for DNS propagation and check each name from more than one network if certificate issuance is time-sensitive.
  4. Make sure no old hosting record, wildcard record or proxy service is sending a hostname elsewhere.

DNS must resolve to this machine before Let’s Encrypt validation can succeed. A certificate request for one hostname does not automatically cover the others; request and renew certificates for every name.

Enable HTTPS and test each hostname

Ghost-CLI can run a Let’s Encrypt SSL stage during production setup. For manually managed PHP sites, use Certbot with the Nginx integration or another ACME client. The normal free SSL path is Let’s Encrypt.

  1. Confirm that DNS resolves to this VPS.
  2. Confirm that TCP ports 80 and 443 are open in both the VPS firewall and any provider-level firewall.
  3. Enable the Nginx files and remove or disable the default catch-all site that could answer with the wrong content.
  4. Run sudo nginx -t. Fix every syntax or referenced-file error before reloading.
  5. Reload with sudo systemctl reload nginx.
  6. Issue certificates for every hostname, then verify that HTTP redirects to HTTPS and that each HTTPS hostname serves its own site.

Test names independently, not only by visiting the server IP. Check the certificate subject and expiry, Ghost administration and publication pages, PHP front-controller routes, static assets, uploads, and a deliberately missing URL.

Keep processes, permissions and databases separated

Process supervision

Run every Ghost instance under its own systemd service. Ghost identifies systemd as the default recommended process manager. A service should start at boot and restart after a crash; inspect status with:

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.
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.
sudo systemctl status ghost_site-a
sudo journalctl -u ghost_site-a --since today

Use the actual unit names created by Ghost-CLI. Do not launch production Ghost processes from an SSH session or from the root account.

File ownership

Ghost-CLI maintains installation permissions for its low-privilege user. For PHP, choose an application owner and a web-server group deliberately. Make only upload, cache and generated-content directories writable. A writable entire code tree makes a compromised application harder to contain.

Database access

Create a separate database and least-privilege database account for each Ghost and PHP application. Bind MySQL to local access unless remote administration is explicitly required, and never expose the database port publicly just to simplify an application configuration.

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

Firewall and SSH

Allow SSH, HTTP and HTTPS through UFW, restrict SSH source addresses where practical, disable password authentication after verified key-based access, and keep the operating system and application dependencies patched.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Backups, monitoring and upgrades

Back up Ghost content, uploaded media, theme files and each database. Back up PHP application files, environment configuration stored outside web roots, user uploads and databases. Ghost-CLI documents full-site backup capability, but you must choose retention, off-site storage and restore frequency for your workload.

  • Keep more than one backup generation and store at least one copy off the VPS.
  • Test a restore into a separate directory or temporary machine before trusting the backup.
  • Record the Node.js, PHP, MySQL and application versions used by each site.
  • Monitor memory, swap, disk space, I/O wait, database growth, certificate expiry, Nginx errors and systemd failures.
  • Schedule upgrades one site at a time when possible, and take a fresh backup first.

A single VPS has a shared failure domain. A kernel problem, full disk, provider outage or exhausted memory can affect every hostname even when the applications themselves are configured separately.

Common failures and precise checks

The wrong site appears

  • Check that the hostname resolves to this VPS.
  • Confirm the request hostname exactly matches the intended server_name.
  • List enabled symlinks in /etc/nginx/sites-enabled/.
  • Disable the default server or another catch-all that is winning the match.
  • Run sudo nginx -T and inspect the loaded server blocks.

Ghost returns 502 Bad Gateway

Check the Ghost systemd unit and logs, verify that the process is listening on the expected loopback port, and make sure proxy_pass uses that exact port. A stopped process, duplicate port assignment or wrong generated configuration is more likely than an Nginx networking problem because the target is local.

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

HTTPS redirects forever

Ensure the Ghost block sends proxy_set_header X-Forwarded-Proto $scheme;. Also check that the canonical Ghost URL is HTTPS and that a second proxy or CDN is not rewriting the protocol inconsistently.

PHP source downloads instead of executing

Verify that the PHP-FPM service is running, the configured socket exists, the Nginx PHP location matches the filename, and fastcgi_pass points to the installed socket. Reload Nginx after correcting the file and retest with a non-sensitive PHP route.

Uploads fail or time out

Raise client_max_body_size only in the affected Ghost or PHP server block, then reload Nginx. Check application-level limits, PHP’s upload and post-size settings, available disk space and directory ownership as well.

Certificate issuance fails

Recheck DNS propagation, confirm ports 80 and 443 reach this VPS, remove conflicting web-server rules, and rerun the ACME client. Validation cannot succeed when an old address or the wrong default virtual host answers the challenge.

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

Know the scaling boundary

Ghost supports one instance per site. Its documentation explicitly says it does not support load-balanced clustering or multi-server deployments of any description. Hosting several independent sites on one VPS is therefore different from clustering one Ghost publication across several servers.

When CPU, RAM, storage I/O, database load or backup windows become constrained, measure which site is responsible before moving anything. If availability or isolation requirements exceed one machine, design and test a separate multi-server architecture rather than placing Ghost instances behind an unsupported load-balanced cluster.

Ghost-CLI, manual Nginx or containers?

Decision factor Ghost-CLI per site Manual or containerized management
Initial setup Automates common Nginx, SSL, systemd, user and database steps More decisions and files to maintain
Upgrade ownership Guided by Ghost-CLI and its supported path You own image, package or deployment sequencing
Per-site isolation Separate directories, ports and services when installed correctly Can be stronger with dedicated pools or containers, at added complexity
SSL automation Integrated Let’s Encrypt stage Certbot or another ACME workflow must be operated
Backup and restore Ghost-CLI documents full-site backup capability You must define file, volume, database and restore procedures
Migration effort Familiar Ghost layout and systemd units Depends on container images, volumes and orchestration choices

Ghost’s current hosting guidance indicates that newer self-hosted features are moving toward modern Docker Compose tooling. Check the installation path and version-specific requirements immediately before starting a new build; do not mix commands from an older release with a newer deployment model.

Final deployment checklist

  • Every hostname has correct A and, when applicable, AAAA records.
  • Each Ghost site has a unique directory, URL, database, credentials, systemd unit and local port.
  • Each PHP site has a dedicated root, correct front-controller rule and verified PHP-FPM socket.
  • Nginx owns ports 80 and 443, and the default catch-all is not serving production traffic.
  • nginx -t passes before every reload.
  • Every hostname has its own valid certificate and redirects from HTTP to HTTPS.
  • UFW limits exposure to required ports; MySQL is not publicly reachable without a deliberate reason.
  • Logs, memory, disk, certificates and systemd services are monitored.
  • Backups include databases and uploaded content, have off-site copies and have passed a restore test.
  • Capacity is reviewed as the combined sites grow, with the one-instance-per-site Ghost limitation respected.

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
Crashes, No Sound, or Screen Glitches?Free driver scan
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.