Recommended Free Tools
One VPS can serve several independent Ghost publications and PHP applications safely when Nginx is the public entry point, every hostname has its own server block, and each application keeps separate files, processes, databases, credentials, and logs. Nginx listens on ports 80 and 443, reads the request’s Host header, and forwards the request either to a Ghost process on a unique localhost port or to the correct PHP-FPM socket.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
This guide covers the complete layout: capacity planning, DNS, Ubuntu preparation, per-site Ghost-CLI installs, PHP virtual hosts, HTTPS, permissions, backups, monitoring, troubleshooting, and the point at which a single VPS stops being an appropriate architecture.
As an Amazon Associate I earn from qualifying purchases.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC 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 & 11What the finished architecture looks like
Each hostname is an independent Nginx site. Ghost is an application server, so Nginx reverse-proxies requests to a Ghost process bound to loopback. PHP applications are served from separate document roots, with dynamic requests passed to PHP-FPM. Public traffic never connects directly to the Ghost ports or PHP-FPM sockets.
| Concern | Ghost publication | PHP site |
|---|---|---|
| Public edge | Nginx server block selected by hostname | Nginx server block selected by hostname |
| Application target | Unique localhost port, such as 2368 or 2369 | Dedicated document root and PHP-FPM socket or pool |
| Files | Separate directory under /srv/ghost/ |
Separate directory such as /var/www/php-a/public/ |
| Database | Separate database and credentials for each publication | Separate database and credentials when the application needs one |
| Service manager | One systemd unit per Ghost instance | Shared or dedicated PHP-FPM service, depending on isolation needs |
| Logs | Per-site Nginx and Ghost logs | Per-site Nginx and application logs |
A representative directory plan is:
/srv/ghost/site-a/ # Ghost instance A
/srv/ghost/site-b/ # Ghost instance B
/var/www/php-a/public/ # PHP site A
/var/www/php-b/public/ # PHP site B
/etc/nginx/sites-available/site-a.example
/etc/nginx/sites-available/site-b.example
/etc/nginx/sites-available/php-a.example
/etc/nginx/sites-available/php-b.example
Keep names, roots, ports, sockets, databases, and logs distinct. A naming convention that includes the hostname or a short site identifier prevents one site’s maintenance command from being run in another site’s directory.
#1 Best Overall
- BLUE LIGHT BLOCKING GLASSES: Our blue light glasses for women boast UV400 protection, blocking harmful blue rays from computer screens. With these bluelight glasses women, you can enjoy gaming, reading, or watching TV with no worries of eye strain.
- EYE RELIEF: Our blue light glasses are engineered to reduce blurry vision or strain caused by prolonged screen time. These womens blue light glasses aid in better sleep by preventing blue light from disrupting your natural sleep cycle, helping you fall asleep faster and enjoy a more restful night's sleep, making them the perfect christmas present.
- COMFORTABLE: Crafted from durable material, our trendy blue light glasses for woman or blue light glasses men ensure long-lasting comfort. The high-transmittance lenses accessories, gamer gifts for men, help keep your eyes relaxed. Perfect stocking stuffers, gifts for gamers men, christmas gifts for men, halloween costumes.
- LIGHTWEIGHT: These clear blue light glasses feature a lightweight frame, meaning they’ll stay comfy for long-term wear. Perfect as blue blockers glasses for women or mens blue light glasses, these non-prescription fake glasses for men can be worn throughout the day. The blue light blocking glasses women feature polycarbonate HD lenses, which are anti-reflective and restore true color.
- WORRY-FREE PURCHASE: If you experience any issues, our support team is ready to assist you quickly. These are the perfect costume glasses for cosplay dressing up.
Requirements and capacity planning
Use a current Ubuntu 24 installation with at least 1 GB of memory as the minimum baseline for Ghost hosting guidance. The recommended software baseline is Node.js 22 LTS, MySQL 8.0, Nginx, systemd, a non-root administrative user, HTTPS, and a firewall that permits only the services you intend to expose. Multiple sites share CPU, RAM, storage I/O, database capacity, and backup windows, so 1 GB is a starting point rather than a promise that any number of publications will run comfortably.
Before you begin
- Control of an A or AAAA record for every hostname.
- SSH access through a non-root account with narrowly scoped
sudoprivileges. - A VPS address that remains stable while certificates are issued and renewed.
- Enough disk space for application files, image uploads, databases, logs, and at least one local backup staging area.
- Ports 80 and 443 reachable from the Internet, plus SSH restricted to your administration source where practical.
- A written inventory of each site’s hostname, filesystem path, database name, database user, Ghost port or PHP-FPM socket, and backup location.
Choose isolation deliberately
Separate Unix users and PHP-FPM pools provide stronger containment than simply placing sites in different folders. Ghost-CLI creates a low-privilege ghost user and manages installation permissions. For PHP, run code with a user that cannot write to unrelated applications, and make only the directories that need uploads writable by the application.
Prepare DNS, the operating system, and the firewall
- Create an A record for each hostname pointing to the VPS IPv4 address. Add AAAA records only when the VPS has working IPv6 routing and Nginx is listening on that address. Wait for DNS changes to propagate before requesting certificates.
- Log in through SSH using your non-root account and update package metadata and installed packages.
- Install Nginx, MySQL, the PHP runtime and the PHP-FPM package required by your applications. Install Node.js 22 LTS for Ghost and verify the versions rather than assuming a distribution default is current enough.
- Enable Nginx, MySQL, and PHP-FPM at boot. Do not expose MySQL or PHP-FPM on a public interface.
- Configure UFW or an equivalent firewall to allow SSH, HTTP, and HTTPS, while denying unsolicited database and application-port traffic.
Check the actual PHP-FPM socket after installation:
ls -l /run/php/
systemctl status php*-fpm
Socket names vary by distribution and PHP version. A configuration copied from another server that points to a nonexistent socket will produce a 502 response, so use the path shown on this machine.
Install each Ghost publication independently
Ghost supports one instance per site. Install every publication in its own directory and give it a unique canonical URL, database, database user, and local port. Ghost-CLI’s production setup can create the Nginx configuration, systemd unit, Let’s Encrypt certificate setup, low-privilege user, and other production settings for that instance.
Install Ghost-CLI once
From an account with the required administrative privileges, install Ghost-CLI globally, then perform production installs as the designated non-root user. The exact Node package-manager command can vary with your Node installation; verify that ghost --version works before creating sites.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
- WINDEX GAMING WIPES: effortlessly clean all your gaming gear and gaming electronics in one easy step with our new Windex Gaming Wipes
- AMMONIA FREE: our ammonia-free formula is safe to use on all of your favorite gaming equipment like consoles, headsets, controllers, screens, keyboards, and more
- PRE-MOISTENED WIPES: each wipe instantly removes dust, dirt, and stubborn smudges and fingerprints leaving a streak-free shine
- ANTI-STATIC: great for cleaning and wiping down your gaming gear and electronics leaving behind no visible residue
- COMPACT RESEALABLE PACKAGE: store your pack of Windex Gaming Wipes anywhere in your home for whenever a quick and easy wipedown is needed
Create site A
- Create and enter a dedicated directory, for example
/srv/ghost/site-a, and ensure the account running Ghost owns it. - Run
ghost installfrom that directory. - When prompted, enter the canonical URL
https://ghost-a.example.com, the MySQL host and credentials, and a database name used only by this publication. - Allow the production setup to configure systemd and Nginx. If you are issuing certificates separately, decline or defer the SSL stage and complete it after DNS and HTTP routing are working.
- Record the localhost port selected by Ghost-CLI. The familiar default is 2368, but a second instance must use another free port, such as 2369.
Create site B
Repeat the same process in /srv/ghost/site-b, using https://ghost-b.example.com, different MySQL credentials and database, and a different local port. Never point two Ghost systemd units at the same directory or database.
Verify the generated configuration
Ghost-CLI generates a site-specific Nginx file and systemd unit. Read the file before enabling neighboring sites and confirm that its server_name, proxy port, canonical URL, and certificate names belong to the intended publication. A generated port can change if you alter the installation, so treat the configuration as the source of truth.
Configure Nginx for Ghost
Ghost is designed to run behind a reverse proxy. A minimal HTTP server block for one 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, use its hostname and port:
Free tools Windows power users keep installed
One-click scans. No signup required.
server {
listen 80;
server_name ghost-b.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:2369;
}
client_max_body_size 50m;
}
The X-Forwarded-Proto header is essential. It tells Ghost whether the original request used HTTP or HTTPS; an incorrect value can cause an endless HTTPS redirect loop. Set client_max_body_size only as high as your upload, import, or theme workflow requires, because a large value applies to requests handled by that server block.
Configure each PHP site with its own root and FastCGI target
Create a separate public directory for every PHP application. Keep configuration files, private keys, and environment files outside the web root whenever the application supports it. A front-controller application can use this pattern:
Rank #3
- Ergonomic & Adjustable Design: Fight "text neck" and improve your posture. Designed for comfort, it offers an adjustable height (7.1in-8.5in) (1.4in adjustable range) and angle (5°-85°) Please note: cell phone stand is only 9 inches tall—the length of a standard pencil
- Without blocking subtitles Perfect for office desk Tiktok Face Time Zoom video—this is the ultimate kitchen desk essential for phones! Perfect viewing experience while reducing neck back strain, A must-have for gamers streamers desk, and anyone who values both style and support!
- Sleek & Stable Design fits Otterbox Case: Say goodbye to bent cables, tangles, and tip-overs! LISEN’s stylish adjustable desk phone holder features a built-in charging hole and smart cable management, keeping your phone secure and your workspace clutter-free cool gadgets for men
- ANTI-SLIP DESIGN free hands: The under 10.00 items easy gadgets back and the bottom of this kitchen essentials for women are fully covered by anti-skid silicone, which LISEN stand up desk decor can provide maximum protection device from any scratches and slides
- Your Perfect Viewing Companion:If your product arrives damaged or breaks within 365 days, reach out to LISEN for a quick and hassle-free solution. Struggling with assembly, like tightening the screw? We’ve got your back! Your experience matters to us. (Product including: phone Holder stand*1, screw*1, hexagon screwdriver*1, specification*1)
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;
}
location ~ /.env {
deny all;
}
}
Replace /run/php/php-fpm.sock with the socket installed on this VPS, such as a versioned path under /run/php/. If the application needs a specific PHP version, create a matching FPM pool and point only that site’s server block to it. Do not let Nginx serve source files as downloads: a PHP file that downloads instead of executing usually means PHP-FPM is stopped, the socket is wrong, or the PHP location is not being selected.
Enable sites and test routing before HTTPS
- Place one configuration file per hostname in
/etc/nginx/sites-available/. - Create symlinks only for sites you intend to serve in
/etc/nginx/sites-enabled/. - Remove or disable the distribution’s default catch-all while testing. It can answer for an unmatched hostname and make a DNS or
server_nameerror look like an application failure. - Run
sudo nginx -t. Do not reload if the test reports a syntax or include error. - Reload with
sudo systemctl reload nginx. - Test each hostname independently, including the exact name users will enter. Confirm that Ghost reaches its own publication and PHP reaches its own document root.
At this stage, an HTTP response from the correct site proves that DNS, Nginx server selection, and the application target are aligned. It does not yet prove that HTTPS or certificate renewal works.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Issue and renew HTTPS certificates for every hostname
Every hostname needs its own certificate covering that name. Ghost-CLI can perform a Let’s Encrypt setup during production installation; alternatively, use Certbot with the Nginx integration after HTTP routing is working.
- Confirm that each A and AAAA record resolves to this VPS and that port 80 reaches Nginx from the public Internet.
- Run the Ghost-CLI SSL stage for a Ghost site, or request the certificate with Certbot for the relevant hostname.
- Repeat for every Ghost and PHP hostname. Include both the bare name and a
wwwname only when DNS and the site’s canonical URL are configured for both. - Let the tool install the HTTPS server block and redirect HTTP to HTTPS, or add an explicit redirect after validating the certificate-backed block.
- Reload Nginx and test each site in a private browser window and with an HTTP client. Check the certificate name, redirect destination, admin login, image upload, and a representative PHP form.
Certificate issuance fails when DNS has not propagated, an AAAA record points elsewhere, a firewall blocks port 80, or another service answers the challenge. Fix reachability first, then rerun the certificate command. Keep automated renewal enabled and monitor its timer or scheduled job.
Permissions, processes, and secrets
Run Ghost under systemd
Use one systemd unit per Ghost installation. The service should start at boot and restart after a crash, while its working directory and environment refer only to that publication. Check a unit with systemctl status and inspect recent output with journalctl -u your-site-service. Never solve a permission error by running the entire Ghost application as root.
Separate credentials
- Give each Ghost database its own MySQL user and grant only that database’s required privileges.
- Use different credentials for PHP applications, even when they share one MySQL server.
- Store secrets in application configuration with file permissions that exclude other site users and Nginx’s public document roots.
- Restrict SSH keys, disable password login where your operational policy permits, and avoid exposing database ports to the Internet.
Protect writable directories
Uploads and cache directories may need write access; application code generally should not. Review ownership after every deployment, especially when a package manager or archive extraction was run with sudo. Deny direct access to environment files, repository metadata, backup archives, and server configuration fragments.
Rank #4
- Easy Installation: Our gaming lights have been designed to enhance your entertainment experience. Simply position the led light bar next to your TV or game console to create a game room environment with ease. They come with USB power and a 60 inch cord for direct mounting and mobility
- Audio Syncing & Extensive Mode: The built-in high-sensitivity music sensor allows you to sync the TV led lights to your favorite music. Lights react and move to the beat of music, film and game audio, creating an incredible immersive sound and light experience – and all without the need for an additional hub. You can choose from 64+ patterns, including strobe, illusion, jump, energy, gradient, running, chasing, fluttering mode etc. Each mode can be applied to different scenes
- 64+ Chasing IC+RGB & W Effect: The independent control design of IC+RGB and white all-in-one multifunctional rgbw led bar lights monitor backlight allows you to easily switch the led lights for desk between IC+RGB and white to enjoy a variety of lighting effects, you can choose white lighting mode with high brightness for better illumination when working, etc. Choose IC+RGB lighting mode when you need to create an entertaining atmosphere for the light show, 16 million colours of Color changing rgb light bar let you dance to the beat and create a dynamic party atmosphere
- Dynamic and Dimmable Lights: 1%-full brightness free brightness adjustment gives you the flexibility to adjust dimmable led light bar for room decorations or a variety of occasions
- USB Powered: USB light bars for room can be powered by powernank, usb charger, TV, Monitor, laptop PC mainframe, making behind TV led lighting bar easy to install in any location.TV led lights are powered by the TV usb interface / PC mainframe, can be turned on/off synchronously with TV / PC
Backups and routine operations
Back up both content and databases. For Ghost, that means publication content, images, themes, and the MySQL data; for PHP, include application data, uploaded files, and the database used by the application. A filesystem snapshot alone is not enough if the database is changing.
- Keep a local backup staging area separate from each site’s live directory.
- Copy backups to off-site storage and define a retention schedule appropriate to the publication.
- Back up before Ghost, PHP, Node.js, MySQL, or operating-system upgrades.
- Test a restore on a separate path or disposable VPS. A backup that has never been restored is only an assumption.
- Watch free disk space, memory pressure, database growth, Nginx error rates, Ghost service health, and certificate-renewal results.
- Rotate logs so one busy site cannot consume the disk needed by every other site.
Ghost-CLI provides full-site backup capabilities, but retention, off-site storage, and restore frequency remain operational decisions. Document who can restore each site and where its database credentials are stored.
Ghost-CLI, manual Nginx, or containers?
There is no universally best deployment method. Choose based on who owns upgrades and how much isolation you need.
| Decision axis | Ghost-CLI production install | Manual or containerized management |
|---|---|---|
| Upgrade ownership | Ghost-CLI follows Ghost’s supported production workflow and creates service integration. | You own image, package, compose, systemd, and migration sequencing. |
| SSL automation | SSL can be part of the setup flow. | You must design certificate issuance, renewal, and proxy integration. |
| Per-site isolation | Separate directories, users, ports, units, and databases are straightforward. | Containers or custom users can strengthen isolation but add operational layers. |
| Observability | Use systemd, Nginx, and Ghost logs with familiar host tooling. | Include container logs, health checks, image lifecycle, and host monitoring. |
| Backup and restore | Ghost-CLI documents site backup; you still choose retention and off-site storage. | You must back up volumes, databases, secrets, and deployment definitions consistently. |
| Migration effort | Simple for conventional single-host Ghost sites. | Can be repeatable across servers, but requires a tested migration and rollback plan. |
Ghost’s newer self-hosted direction is moving toward modern Docker Compose tooling for some features. Verify the installation path for the exact Ghost version you plan to deploy instead of assuming that an older tutorial matches current tooling.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot by symptom
The wrong site appears
Check that the hostname resolves to this VPS, the Nginx file has the exact server_name, the intended symlink exists in sites-enabled, and the default server is not catching the request. Test with the hostname in the request, not only the server’s IP address.
Ghost returns 502 Bad Gateway
Check the Ghost systemd unit, read its journal, confirm that the process is listening on the expected loopback port, and compare that port with proxy_pass. A stopped service, an occupied port, or a typo in the generated configuration all produce the same Nginx symptom.
Best Value
- Compatible with Wide Screens - To ensure compatibility with the dual monitor mount, your each monitor must meet three conditions at the same time: First, computer screens size range: 13 to 32 inches. Second, screen weight range: 4.4 to 19.8 lbs. Third, the back of the monitor screen must have VESA mounting holes with a pitch of 75x75mm or 100x100mm.
- Regarding the compatibility with desks - Your desk must meet three conditions at the same time: First, desk material: Only wooden desks are recommended, plastic or glass desks cannot be used. Second, desk thickness range: 0.59" - 3.54". Third, the bottom of the desk should not have any cross beams or panels, as this will interfere with installation. We recommend carefully checking that your desk and monitors meets all above conditions before purchasing.
- Dual C-Clamp Hold - Worried your dual monitors might wobble or slip? Our upgraded base uses a larger platform plus a dual C-clamp structure to lock the dual monitor arm firmly to your desk. Each arm safely keeps your screens steady while you type, click and game—no shaking, no sliding, just a clean and secure setup you can trust every day. It also provides Grommet Mounting installation choice, both options ensure stable and secure fixation for your 0.59" - 3.54" desk.
- Full-Motion Adjustment For Comfortable View - Pull the screen closer when you’re deep in a spreadsheet, push it back to watch videos, or rotate to portrait for coding — moving everything smoothly with just one hand. The monitor stand offers +85°/-50° tilt, ±90° swivel and 360° rotation. Raise your monitor up to 15.75″ to support a healthy sitting posture. Whether you’re working from home, gaming through the night, or switching between video calls and documents, getting the screens to your natural line of sight helps relieve neck, shoulder and back strain so you can stay focused longer with less fatigue.
- Keep Your Desk Organized: By lifting both screens off the desktop, this dual monitor stand opens up valuable space for your keyboard, notebook, docking station or a simple, clutter-free work area. Built-in cable management guides wires along the arms, keeping cords out of sight and out of the way. Enjoy a tidy, modern workstation that looks as good as it feels to use.
HTTPS redirects forever
Ensure the Ghost proxy sends X-Forwarded-Proto $scheme and that Ghost’s canonical URL is HTTPS. Also verify that the TLS server block is not forwarding an HTTPS request to an HTTP-only hostname with conflicting redirects.
PHP source downloads instead of executing
Confirm that PHP-FPM is running, the configured socket exists, the PHP location matches the request, and fastcgi_param SCRIPT_FILENAME resolves to the actual file. Test a harmless diagnostic endpoint and remove it immediately after testing.
Uploads or imports fail
Raise client_max_body_size in only the affected server block, then check PHP’s upload limits and the application’s own limit. Ensure the destination directory is writable by the correct service user and that the VPS has free disk space.
Certificate issuance fails
Verify DNS propagation, remove incorrect AAAA records, confirm that ports 80 and 443 reach this VPS, and ensure no other virtual host intercepts the ACME challenge. Rerun the certificate tool only after the reachability problem is corrected.
Know the scaling boundary
A single VPS can host multiple independent sites, but it is still one failure domain. A disk failure, exhausted memory, kernel problem, or maintenance reboot affects every publication and PHP application on that machine. Resource contention is often gradual: image processing and database activity from one site can make another appear unreliable.
Ghost does not support load-balanced clustering or multi-server deployments of any description; there should be one Ghost instance per site. Do not place two active Ghost instances behind a load balancer as if they were interchangeable nodes. If uptime, geographic redundancy, or tenant isolation requirements exceed a single VPS, design and test a separate multi-server architecture rather than assuming Ghost clustering is available.
Operational checklist
- Every hostname has correct A or AAAA records and a tested certificate.
- Nginx owns ports 80 and 443; Ghost and PHP-FPM are not publicly exposed.
- Each Ghost instance has one directory, systemd unit, localhost port, database, and credential set.
- Each PHP site has one document root and the correct PHP-FPM socket or pool.
nginx -tpasses before every reload.- HTTP redirects to HTTPS without loops, and uploads work at the intended size.
- Firewall rules, file permissions, secret storage, log rotation, and certificate renewal are reviewed.
- Backups include databases and uploaded content, are copied off-site, and have been restored in a test environment.
- Memory, CPU, storage, database load, and backup windows are monitored as a shared pool.
Bottom line
Use Nginx as the single public edge, map each hostname to its own server block, run every Ghost publication on a separate localhost port under systemd, and give every PHP site its own root and PHP-FPM target. Ghost-CLI reduces the amount of production plumbing you must build for each publication, while disciplined DNS, HTTPS, permissions, backups, and monitoring keep the sites independent. This model is reliable for several modest sites, but it does not turn one VPS into a clustered Ghost platform: when the shared failure domain or resource ceiling is unacceptable, move to a separately tested multi-server design.
Quick Recap
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.




