- Why Host Multiple Sites on One VPS
- Prerequisites and Server Requirements
- Point Multiple Domains with DNS
- How to Use Nginx Virtual Hosts
- How to Host Sites with Docker and a Reverse Proxy
- How to Use a Control Panel for Multiple Sites
- Configure SSL for Every Domain
- Isolate Resources and Avoid Noisy Neighbours
- Conclusion
Learning to host multiple websites on one VPS is one of the fastest ways for UK developers, freelancers and agencies to cut hosting bills while keeping full control of the stack. A single virtual private server can comfortably run a handful of low-traffic sites, a portfolio of client projects, or a mix of WordPress, static and app-based domains. This guide walks through the practical methods, the DNS groundwork, SSL, and how to stop one busy site from dragging down the rest.
Why Host Multiple Sites on One VPS
The economics are simple: instead of paying for separate hosting accounts for every project, you pay once for a server and split its resources across many domains. You also gain root access, so you choose the web server, PHP version, caching layer and security tooling rather than living inside someone else’s shared-hosting limits. For agencies, consolidating client sites onto one box means one place to patch, back up and monitor.
It works because a domain is not tied to a whole server. Each site is just another virtual host listening on the same IP address, differentiated by the Host header the browser sends. If you are still weighing whether a VPS is the right tier at all, our hosting types decision guide compares shared, VPS, dedicated and cloud in plain terms.
Prerequisites and Server Requirements
Before you point a single domain at your server, get the fundamentals in place. A little planning here saves hours of debugging later, especially around DNS propagation and firewall rules.
What You Need to Host Multiple Websites on One VPS
- A UK VPS with root or sudo access and a static public IP (ideally both an IPv4 and IPv6 address).
- Registrar or DNS-provider access so you can edit records for every domain.
- Ports 80 and 443 open in the firewall for HTTP and HTTPS (plus SSH, ideally hardened).
- A rough traffic estimate per site so you can size RAM and CPU sensibly.
- A decision on approach: raw Nginx/Apache virtual hosts, Docker containers, or a control panel.
Also decide early whether you want a managed or self-managed setup. If you would rather not patch the OS and web server yourself, our comparison of managed vs unmanaged VPS hosting explains the trade-offs before you commit.
Point Multiple Domains with DNS
Every domain you host must resolve to your server. For each one, create a DNS A record pointing the apex (for example example.co.uk) at your VPS IPv4 address, and an AAAA record if you use IPv6. Add a matching record for the www subdomain (an A record or a CNAME back to the apex). Because all your domains share the same IP, this is where the magic starts: the browser resolves each domain to the same server, and the web server decides which site to serve based on the hostname.
DNS changes can take anywhere from a few minutes to a few hours to propagate. If you sit behind Cloudflare for caching and DDoS protection, set the records there instead and keep them proxied; our guide to setting up Cloudflare CDN covers that flow for WordPress.
How to Use Nginx Virtual Hosts
The classic, lightweight way to host multiple websites on a single VPS is with Nginx server blocks (Nginx’s term for virtual hosts). You keep one configuration file per site in /etc/nginx/sites-available and symlink the active ones into /etc/nginx/sites-enabled. Each block sets its own server_name, document root, and a dedicated PHP-FPM pool so sites do not share a PHP process. A minimal block looks like this:
server {
listen 80;
server_name example.co.uk www.example.co.uk;
root /var/www/example/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/example.sock;
}
}
Create a second file for the next domain with its own server_name, root and PHP-FPM socket, run nginx -t to test, then systemctl reload nginx. Giving each site its own PHP-FPM pool matters: it caps the worker count per site and stops a memory leak in one from starving the others. The authoritative reference for how hostname matching works is the Nginx server_names documentation. Apache users get the same result with <VirtualHost> blocks and ServerName directives.
How to Host Sites with Docker and a Reverse Proxy
The container approach runs each site as its own isolated stack — a WordPress container plus its own database, for example — and puts a Docker reverse proxy in front to route traffic by domain. Nginx Proxy Manager (a friendly GUI), Traefik and Caddy are the popular choices, and all three can automatically issue and renew Let’s Encrypt certificates. The proxy reads each container’s labels or config and forwards requests for a given hostname to the right stack.
With Traefik, you tell it which domain a service answers to using labels on the container:
services:
wordpress:
image: wordpress:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.site1.rule=Host(`example.co.uk`)"
- "traefik.http.routers.site1.tls.certresolver=le"
networks:
- proxy
To add another site, you spin up a second stack with a different Host() rule — no editing of a central config needed. This gives excellent isolation (each site has its own filesystem, dependencies and database) and makes sites trivial to move between servers. For a complete production build, follow our walkthrough on running Docker Compose WordPress on a UK VPS.
How to Use a Control Panel for Multiple Sites
If you would rather click than edit config files, a control panel gives you a GUI to add domains, create databases, set up email and issue SSL. This is the best route for non-technical users or agencies juggling many client sites, because everything from DNS to backups lives in one dashboard.
- CyberPanel — free, built on OpenLiteSpeed, lightweight and fast for WordPress.
- CloudPanel — free, modern, Nginx-based, low resource footprint.
- DirectAdmin — paid but affordable, stable and popular with hosts.
- Plesk — polished, feature-rich, strong Windows and WordPress tooling.
The trade-off is overhead: a panel and its services consume RAM and CPU you could otherwise give to sites, so size the VPS accordingly. If you are choosing between the big paid options, our comparison of cPanel vs Plesk breaks down which suits which workload.
| Approach | Best for | Isolation | Overhead | SSL |
|---|---|---|---|---|
| Nginx virtual hosts | Developers who want control | Medium (per-site PHP-FPM pools) | Very low | Certbot, manual or automated |
| Docker + reverse proxy | Portable, isolated stacks | High (containers) | Low–medium | Auto via Traefik/Caddy/NPM |
| Control panel | Many client sites, non-technical | Medium | Higher (panel services) | One-click Let’s Encrypt |
Configure SSL for Every Domain
Every site you host should be served over HTTPS — there is no excuse in 2026, and it is free. For the raw Nginx or Apache route, install certbot and issue a per-domain certificate:
sudo certbot --nginx -d example.co.uk -d www.example.co.uk
Certbot edits the server block, installs the certificate and sets up automatic renewal via a systemd timer. If you run many subdomains under one domain, issue a wildcard certificate using the DNS-01 challenge instead of requesting a new cert for each. With the Docker reverse proxies and control panels, SSL is handled for you: Traefik, Caddy, Nginx Proxy Manager and panels like CyberPanel request and renew Let’s Encrypt certificates automatically the moment you add a domain.
Isolate Resources and Avoid Noisy Neighbours
Here is the honest caveat: on one VPS, every site shares the same CPU, RAM and disk I/O. A single busy — or compromised — site can become a noisy neighbour and starve the others. This is the main risk of consolidating, and you manage it with deliberate limits rather than hoping for the best.
- Give each PHP application its own PHP-FPM pool with a capped
pm.max_children. - In Docker, set
--cpusand--memory(or Composedeploy.resources.limits) per container. - Add per-site page caching so traffic spikes hit the cache, not PHP and the database.
- Monitor CPU, RAM and I/O so you spot a runaway site early.
- Harden every site — one hacked WordPress install threatens the whole box, so keep SSH locked down using our SSH hardening steps.
Know when one VPS is no longer enough. If the combined traffic saturates the server, if a client demands compliance separation, or if a single site outgrows the box, it is time to split sites across multiple VPSs or scale up to a larger plan. A UK Speed VPS makes that easy — add a second server for the heavy sites and keep the rest consolidated.
Conclusion
You can host multiple websites on one VPS with any of three proven approaches: lean Nginx virtual hosts for control, Docker with a reverse proxy for isolation and portability, or a control panel for a point-and-click experience. Whichever you pick, the DNS, SSL and resource-isolation principles are the same — point every domain at the server, secure it with Let’s Encrypt, and cap what each site can consume.
Start small, measure, and split the box only when the numbers tell you to.
- Pick your approach based on skill level and how many sites you run.
- Add DNS A records for every domain and issue HTTPS for each.
- Set per-site resource limits before you add the next site.
- Watch your metrics and scale to a second VPS when one is full.
