Hosting Multiple Websites on a VPS with Nginx: A Complete Tutorial
Step-by-Step Guide to Hosting Multiple Sites on a VPS with Nginx
To host multiple websites or applications on a VPS using Nginx, you can create separate server blocks (virtual hosts) for each site. Here’s a step-by-step guide to setting this up:
1. Update and Install Nginx
First, ensure your VPS is up-to-date and that Nginx is installed.
sudo apt update
sudo apt upgrade
sudo apt install nginx
2. Configure DNS
Ensure each domain name points to your VPS's IP address by updating the DNS records at your domain registrar.
3. Create Directory Structure
Create directories for each site. For example:
sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.com/html
sudo chown -R $USER:$USER /var/www/site1.com/html
sudo chown -R $USER:$USER /var/www/site2.com/html
sudo chmod -R 755 /var/www
4. Create Sample HTML Files
Create a simple HTML file for each site to test the setup.
echo "<html><body><h1>Welcome to Site1</h1></body></html>" > /var/www/site1.com/html/index.html
echo "<html><body><h1>Welcome to Site2</h1></body></html>" > /var/www/site2.com/html/index.html|
5. Create Nginx Server Blocks
Create server block configuration files for each site.
sudo nano /etc/nginx/sites-available/site1.com
Add the following content to the site1.com
configuration file:
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Repeat the above steps for site2.com
.
sudo nano /etc/nginx/sites-available/site2.com
Add the following content to the site2.com
configuration file:
server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
6. Enable the Server Blocks
Create symbolic links to enable the new server blocks.
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/
7. Test and Restart Nginx
Test the Nginx configuration for syntax errors and then restart Nginx.
sudo nginx -t
sudo systemctl restart nginx
8. Firewall Configuration (Optional)
If you have a firewall enabled, allow HTTP and HTTPS traffic.
sudo ufw allow 'Nginx Full'
9. SSL Configuration (Optional but Recommended)
For HTTPS, you can use Certbot to obtain and install free SSL certificates.
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com
Certbot will automatically configure SSL for your Nginx server blocks.
Conclusion
You should now have multiple websites running on your VPS, each served by Nginx with its own server block configuration. Ensure your DNS settings are correct and propagate, and you should be able to visit each site by its domain name.