How to Set Up Virtual Hosts on Nginx Servers

How to Set Up Virtual Hosts on Nginx Servers

Setting up virtual hosts on Nginx servers is essential for managing multiple websites on a single server. Virtual hosts allow you to direct requests to different domains or subdomains, thus enabling efficient resource usage. This guide outlines the steps to configure virtual hosts on Nginx servers.

Step 1: Install Nginx

Before setting up virtual hosts, ensure Nginx is installed on your server. You can install Nginx on a Debian-based system with the following command:

sudo apt update
sudo apt install nginx

For CentOS or Red Hat-based systems, use:

sudo yum install nginx

Step 2: Create Directory Structure

Next, create a directory structure for your websites. Each website needs its own root directory. For example:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example.org/html

Make sure to set the correct permissions:

sudo chown -R www-data:www-data /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.org/html

Step 3: Create Test Pages

For each website, create a simple HTML file to test the setup:

echo "

Welcome to Example.com!

" | sudo tee /var/www/example.com/html/index.html echo "

Welcome to Example.org!

" | sudo tee /var/www/example.org/html/index.html

Step 4: Configure Nginx Virtual Host Files

Now, create configuration files for each virtual host. Navigate to the sites-available directory:

cd /etc/nginx/sites-available

Create a file for each domain:

sudo nano example.com

In the entered file, input the following configuration:

server {
    listen 80;
    server_name example.com www.example.com;
root /var/www/example.com/html;
    index index.html;
location / {
        try_files $uri $uri/ =404;
    }
}

Repeat the process for the example.org domain:

sudo nano example.org

And add the following configuration:

server {
    listen 80;
    server_name example.org www.example.org;
root /var/www/example.org/html;
    index index.html;
location / {
        try_files $uri $uri/ =404;
    }
}

Step 5: Enable the Virtual Hosts

To enable the new virtual hosts, link the configuration files from sites-available to sites-enabled:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/

Step 6: Test the Nginx Configuration

Before reloading Nginx, it’s critical to test the configuration for any errors. Run the following command:

sudo nginx -t

If the output states that the configuration is successful, proceed to reload Nginx:

sudo systemctl reload nginx

Step 7: Configure DNS Settings

Ensure that your domain names (example.com and example.org) point to the public IP address of your server. You need to set up A records in your DNS provider’s settings.

Step 8: Access Your Websites

At this point, you should be able to access your websites by entering the domain names in your web browser. You should see the respective welcome pages for each site.

Conclusion

Setting up virtual hosts on Nginx servers enables you to host multiple websites efficiently. By following these steps, you can manage your domains effectively while optimizing server resources.