Create the Directory Structure
Document root is the directory where the website files for a domain name are stored and served in response to requests. The document root can be any directory on your Debian server. In this guide we will use the following directory structure:
/var/www/
├── domain1.com
│ └── public_html
├── domain2.com
│ └── public_html
├── domain3.com
│ └── public_html
We’ll create a separate directory for each domain that will be hosted on our server inside the /var/www
directory. Within each of these directories, we’ll create a public_html
directory that will store the domain website files.
Start by creating the root directory for the domain example.com
:
sudo mkdir -p /var/www/example.com/public_html
Next, create an index.html
file inside the domain’s document root directory.
sudo nano /var/www/example.com/public_html/index.html
Open the file and paste the following lines:/var/www/example.com/public_html/index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Welcome to example.com</title>
</head>
<body>
<h1>Success! example.com home page!</h1>
</body>
</html>
To avoid permission issues change the ownership of the domain document root directory to the Nginx user (www-data
):
sudo chown -R www-data: /var/www/example.com
Create a Server Block
By default on Debian systems, Nginx server blocks configuration files are stored in /etc/nginx/sites-available
directory, which are enabled through symbolic links to the /etc/nginx/sites-enabled/
directory.
Open your editor of choice and create the following server block file:
sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
listen 80;
listen [::]:80;
root /var/www/example.com/public_html;
index index.html;
server_name example.com www.example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}
You can name the configuration file as you like but usually it is best to use the domain name.
Enable the new server block file by creating a symbolic link from the file to the sites-enabled
directory:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Test the Nginx configuration for correct syntax:
sudo nginx -t
If there are no errors the output will look like this:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Restart the Nginx service for the changes to take effect:
sudo systemctl restart nginx