← Back to all postsTutorials

How to Run Multiple Websites on One VPS in Bangladesh

One VPS can host 10, 20, or 50 websites if configured correctly. Here's how to run multiple sites on a single BDIX VPS with Nginx and free SSL for each.

Technical Support Dept.Published Β· Updated Β· 6 min read
On this page

One of the biggest advantages of a VPS over shared hosting is that you control how many websites run on it. Instead of paying separate shared hosting fees for each site, you can host dozens of websites on a single VPS β€” with independent SSL certificates, separate databases, and proper isolation.

This guide shows you how to set up multiple websites on a BDIX VPS using Nginx server blocks (virtual hosts). The same approach works on a Singapore VPS or USA VPS.

Understanding Virtual Hosts (Server Blocks)#

When someone types site1.com in their browser, the request reaches your VPS's IP address. Nginx reads the Host header in the request to determine which website to serve β€” even though multiple sites share the same IP.

Each website gets its own server block β€” a configuration file that tells Nginx: "when someone requests this domain, serve files from this directory."

Prerequisites#

  • A VPS with Ubuntu 22.04 (this guide uses SNBD HOST BDIX VPS)
  • Nginx installed
  • Root or sudo access
  • Domain names pointing to your VPS IP (via A records in your DNS provider)

If you haven't set up your VPS yet, follow our VPS beginner setup guide first.

Directory Structure#

Create a clean directory structure for your sites:

code
sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.com/html
sudo mkdir -p /var/www/site3.com/html

Set ownership so your user can manage files without sudo:

code
sudo chown -R $USER:$USER /var/www/site1.com
sudo chown -R $USER:$USER /var/www/site2.com
sudo chown -R $USER:$USER /var/www/site3.com

Create a test page for site1:

code
nano /var/www/site1.com/html/index.html
code
<h1>Site 1 is working</h1>

Repeat for each site with different content so you can verify which site is loading.

Creating Nginx Server Blocks#

Server Block for site1.com#

code
sudo nano /etc/nginx/sites-available/site1.com
code
server {
    listen 80;
    listen [::]:80;
    server_name site1.com www.site1.com;

    root /var/www/site1.com/html;
    index index.php index.html index.htm;

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

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

    location ~ /.ht {
        deny all;
    }

    access_log /var/log/nginx/site1.com.access.log;
    error_log /var/log/nginx/site1.com.error.log;
}

Server Block for site2.com#

code
sudo nano /etc/nginx/sites-available/site2.com
code
server {
    listen 80;
    listen [::]:80;
    server_name site2.com www.site2.com;

    root /var/www/site2.com/html;
    index index.php index.html index.htm;

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

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

    access_log /var/log/nginx/site2.com.access.log;
    error_log /var/log/nginx/site2.com.error.log;
}

Enable the Sites#

Create symlinks in sites-enabled:

code
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/

Test the configuration and reload:

code
sudo nginx -t
sudo systemctl reload nginx

Adding SSL for Each Site#

Each domain gets its own free SSL certificate from Let's Encrypt:

code
sudo apt install certbot python3-certbot-nginx -y

sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com
sudo certbot --nginx -d site3.com -d www.site3.com

Certbot automatically modifies your Nginx config to redirect HTTP to HTTPS and adds SSL directives. It also sets up automatic renewal via a cron job.

Setting Up Separate Databases#

For WordPress or PHP sites that need databases, create a separate database and user per site:

code
sudo mysql -u root -p
code
CREATE DATABASE site1_db;
CREATE USER 'site1_user'@'localhost' IDENTIFIED BY 'strongpassword1';
GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';

CREATE DATABASE site2_db;
CREATE USER 'site2_user'@'localhost' IDENTIFIED BY 'strongpassword2';
GRANT ALL PRIVILEGES ON site2_db.* TO 'site2_user'@'localhost';

FLUSH PRIVILEGES;
EXIT;

Each site has its own database user with access only to its own database. A vulnerability in site1 can't read site2's database.

Installing WordPress per Site#

For each WordPress site:

code
cd /var/www/site1.com/html
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz --strip-components=1
rm latest.tar.gz
cp wp-config-sample.php wp-config.php

Edit wp-config.php with your database credentials:

code
nano wp-config.php
code
define('DB_NAME', 'site1_db');
define('DB_USER', 'site1_user');
define('DB_PASSWORD', 'strongpassword1');
define('DB_HOST', 'localhost');

Set correct file ownership:

code
sudo chown -R www-data:www-data /var/www/site1.com/html
sudo find /var/www/site1.com/html -type d -exec chmod 755 {} ;
sudo find /var/www/site1.com/html -type f -exec chmod 644 {} ;

Visit https://site1.com and complete the WordPress installation wizard.

How Many Sites Can One VPS Handle?#

The answer depends on traffic, not the number of sites. Here's a realistic breakdown for SNBD HOST VPS tiers:

  • 1 vCPU / 1 GB RAM (ΰ§³499/mo): 5–10 low-traffic WordPress sites (under 500 visitors/day each)
  • 2 vCPU / 2 GB RAM: 15–25 sites, or 5–8 medium-traffic sites
  • 4 vCPU / 4 GB RAM: 40+ sites comfortably, or several high-traffic sites

NVMe SSD storage (standard on SNBD HOST VPS) means disk I/O isn't a bottleneck β€” RAM and CPU are what you run out of first with WordPress sites.

Using PHP-FPM Pools for Better Isolation#

By default, all PHP sites share one PHP-FPM pool running as www-data. For stronger isolation between client sites, create separate pools:

code
sudo cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/site1.conf
sudo nano /etc/php/8.1/fpm/pool.d/site1.conf

Change these values:

code
[site1]
user = site1
group = site1
listen = /run/php/php8.1-fpm-site1.sock
listen.owner = www-data
listen.group = www-data

Create the system user:

code
sudo useradd -M -s /bin/false site1

Update site1's Nginx config to use the dedicated socket:

code
fastcgi_pass unix:/run/php/php8.1-fpm-site1.sock;

This means each site's PHP runs under a different system user β€” a PHP vulnerability on one site can't access another site's files.

Managing Multiple Sites Efficiently#

Centralized Log Monitoring#

With per-site log files, you can monitor all sites easily:

code
# Watch all error logs in real-time
tail -f /var/log/nginx/*.error.log

Per-Site Backup Script#

code
#!/bin/bash
DATE=$(date +%Y%m%d)
for site in site1.com site2.com site3.com; do
    tar -czf /backups/${site}_${DATE}.tar.gz /var/www/${site}
done
mysqldump site1_db > /backups/site1_db_${DATE}.sql
mysqldump site2_db > /backups/site2_db_${DATE}.sql

Checking Nginx Config After Changes#

Always test before reloading:

code
sudo nginx -t && sudo systemctl reload nginx

Cost Comparison: VPS vs Multiple Shared Hosting Plans#

If you're managing websites for clients or running multiple projects in Bangladesh:

  • 5 separate shared hosting plans at ΰ§³250/mo each = ΰ§³1,250/mo
  • One VPS hosting all 5 sites = ΰ§³499–999/mo

The VPS option is significantly cheaper and gives you far more control. As the number of sites grows, the cost advantage of a single BDIX VPS over separate shared plans compounds quickly.

The setup takes a few hours upfront. After that, adding a new site takes about 10 minutes: create the directory, create the server block, run Certbot, create the database. That's a one-time learning investment that saves money every month indefinitely.

Tags:vps bangladeshmultiple websites vpsnginx virtual hostsserver blocksvps hosting bdweb hosting bangladesh
Technical Support Dept.

Written by

Technical Support Dept.

Technical Support Dept is the tech backbone of SNBDHost, sharing clear, practical guides on hosting, performance, and security to help users keep their websites fast, stable, and secure.

Get new posts in your inbox

One email a month: new guides, product notes and automation recipes. No spam, unsubscribe anytime.

We respect your inbox β€” read our privacy policy.