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.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
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.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →| 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
- [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.
| 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.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #2
- 【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.
Recommended Free Tools
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
- [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.
Point DNS at the VPS
- Create an A record for every hostname pointing to the VPS IPv4 address.
- 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.
- Wait for DNS propagation and check each name from more than one network if certificate issuance is time-sensitive.
- 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.
- Confirm that DNS resolves to this VPS.
- Confirm that TCP ports 80 and 443 are open in both the VPS firewall and any provider-level firewall.
- Enable the Nginx files and remove or disable the default catch-all site that could answer with the wrong content.
- Run
sudo nginx -t. Fix every syntax or referenced-file error before reloading. - Reload with
sudo systemctl reload nginx. - 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.
Rank #4
- 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.
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.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.
Best Value
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 -Tand 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.
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.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Know 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.
Quick Recap
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 -tpasses 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.




