How To Setup Virtual Host (Server Block) For Nginx On Ubuntu 14.04

3 Mins read

Here’s a brief tutorial that shows you how to create a virtual host or server block on Nginx web server. Virtual Host is a term used with Apache2 to host multiple websites on a single web server.

Nginx on the other hand calls it Server Block. So to Nginx it’s called Server Block and Apache2, it’s called Virtual Host. So instead of running a single website on a single web server, virtual hosting allows for one web server to host multiple websites with different domain names in separate containers.

That’s what this short guide is going to show you. Websites hosted in virtual environments will need separate root directories to host each website content. Each website also will have its own configurations files which control how the website functions and that’s the beauty of implementing virtual hosting with web servers.

To get started with implementing virtual server blocks on Nginx, continue below.


Install Nginx on Ubuntu 14.04

First install Nginx web server. To do that on Ubuntu 14.04, run the commands one

sudo apt-get update && sudo apt-get install nginx

Creating Virtual Directory

The next step is to create separate virtual directories for each website. Since Nginx default path is at /var/www/, we’re going to be creating our directories in there.

Create a virtual directory for a website called

sudo mkdir -p /var/www/html/

Content for domain will live in the /var/www/html/ directory. You can create as many you like, just keep them separate.

The next thing is granting the appropriate ownership to Nginx webserver. To change the ownership of the directory to Nginx, run the commands below.

sudo chown -R www-data:www-data /var/www/html/

Next, change the permissions on the directory so Nginx can function correctly.

sudo chmod -R 755 /var/www/html

Creating a test page
Now you can create a test index page and place it in the vhost folder of to verify if the virtual host is working since there’s nothing there. Copy and page the code below into a new file called index.html

This is my test page

Configuring the virtual host
The next step is defining the virtual host perimeter in its configuration file. Virtual host configuration files are used to control how the virtual webserver functions and operates.

In this file is where you define the document root directory, control access rights, define the server name, admin email address and more. The configuration file is very important.

When you install Nginx on Ubuntu, a default configuration file with the basic settings is created. This file is there to verify that Nginx is working after you browse to the host.

So, we’re going to make a copy of the default configuration file to create the domain configuration file. To do that, run the commands below.

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/

Next, open the new configuration file for and define the configurations for the virtual site.

sudo vi /etc/nginx/sites-available/

Configure the file

server {
listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
root /var/www/html/;
index index.html index.htm;

This is the basic configuration just to confirm that the virtual host is up. For more detailed configuration of Nginx, do a search on this site for Nginx configuration.

Save the file.

Finally, run the commands below to enable the site by creating a symbolic link to the sites-enabled directory.

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Run the commands below to remove the default enabled site to prevent duplicate entry for the default IP/Port

sudo rm /etc/nginx/sites-enabled/default

Restart Nginx and test the site

sudo service nginx restart

If you’re running this test locally, create a host entry on your local computer for with IP address of the server.

Do this for as many virtual websites as you wish, just make sure to define the unit IP addresses.

About author
I’m a Web Interactive Developer, graduated from Kathir College, with a passion for front-end web development. I enjoy keeping up with new technologies and making the web awesome. I quickly found my passion was in creating a great user experience. Right now i am working at a company who is passionate about their work and to improve my skills by learning from them.
Related posts

Basic Linux Commands List

6 Mins read
Here are many common Linux commands that will be helpful to you, if you ever even use the command line interface in…

How To install vsftpd on CentOS 6

1 Mins read
The first two letters of vsftpd stand for “very secure” and the program was built to have strongest protection against possible FTP…

How To Install phpMyAdmin in Ubuntu 14.04 / 12.04

1 Mins read
phpMyAdmin is the best option for managing MySQL databases through web interface. Its very easy to use and provides almost all the…

Leave a Reply

Your email address will not be published. Required fields are marked *