Google Cloud

How to Set Up Nginx Server Block – Debian 9

In Nginx web server, server blocks (similar to the virtual hosts in Apache) can be used to configure and host more than one domain on a single server on Google Cloud

In this guide you are going to learn how to set up server blocks in Nginx on your Debian 9 server on Google Compute Engine.

Not using Debian 9? Choose a different OS:

CentOS 7

Debian 9

Prerequisites

  1. Your Compute Engine Instance running.
  2. For setting up Compute Engine, see the Setting up Compute Engine Instance.
  3. For installing Nginx and PHP, see how to install LEMP in Compute Engine Instance.
  4. Domain name is pointed to your virtual machine.
  5. For setting up Cloud DNS, see the Setting up Google Cloud DNS for your domain.
  6. Google Cloud SQL Setup, see Setup Cloud SQL and connect with Compute Engine.

Setup Server Blocks

1. Set Up New Root Directory

By default, Nginx provides a default server block configuration. It is configured to serve documents out of a directory at /var/www/html.

Now you shall remove the default configuration and setup a new directory as follows.

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

You can make the new root directory setup as follows.

Replace yourdomainname.com with your original domain name.

home
-- yourdomainname.com
---- logs
---- public

The public directory is your website’s root directory and logs directory for your error logs.

Now we create these directories with the following command.

mkdir -p yourdomainname.com/logs yourdomainname.com/public

2. Set up Correct Permissions

Once the directories are created you can setup correct permissions.

mkdir -p yourdomainname.com/logs yourdomainname.com/public
sudo chmod -R 755 yourdomainname.com

3. Create Server Block

Now create a new Nginx configuration for your website in the sites-available directory.

sudo nano /etc/nginx/sites-available/yourdomainname.com

Copy and paste the following configuration, ensure that you change the server_name, error_log and root directives to match your domain name. Hit CTRL+X followed by Y to save the changes.

server {
listen 80;
listen [::]:80;
server_name yourdomainname.com www.yourdomainname.com;

error_log /home/username/yourdomainname.com/logs/error.log;

root /home/username/yourdomainname.com/public/;
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
}

If you have installed PHP 7.3 you can use this configuration.

server {
listen 80;
listen [::]:80;
server_name yourdomainname.com www.yourdomainname.com;

error_log /home/username/yourdomainname.com/logs/error.log;

root /home/username/yourdomainname.com/public/;
index index.html index.php;

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

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}

To enable this newly created website configuration, symlink the file that you just created into the sites-enabled directory.

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

Check your configuration and restart Nginx for the changes to take effect.

sudo nginx -t
sudo service nginx restart

4. Create Sample Page

Now you can create a new sample page and test the configuration.

sudo nano /home/username/yourdomainname.com/public/index.html

Paste the below piece of code and hit Ctrl+X followed by Y and Enter to save the file.

<html>
    <head>
        <title>Welcome to Nginx Test!</title>
    </head>
    <body>
        <h1>Success!  Nginx server block is working!</h1>
    </body>
</html>

Now visit your domain name in your browser.

http://yourdomainname.com

You should the see the following message.

Success!  Nginx server block is working!

Finally delete the sample page with the below command.

sudo rm -f /home/username/yourdomainname.com/public/index.html

Great! Now you have configured Nginx server blocks successfully on Debian 9. You can also create additional sites using the above method.

Cloudbooklet builds a large collection of Linux based guides and tutorials on Cloud platforms like Google Cloud, AWS, Azure, DigitalOcean and more

Write A Comment

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

If you find this helpful? Support me!
Buy me a coffee Donation Please buy me a coffee