Compute Engine Google Cloud

How to Set Up Nginx Server Block – Ubuntu 18.04

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 Ubuntu 18.04 server on Google Compute Engine.

Choose Best Hosting for your Business

PlatformReviewsPricing
Siteground★★★★★$3.95
Kinsta – Google Cloud★★★★★$30

Not using Ubuntu 18.04? Choose a different OS:

Ubuntu 18.04 LTS

CentOS 7

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 Ubuntu 18.04. 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

5 Comments

  1. Wonderful tutorial.

    Any specific reason to choose ‘/home’ directory for new server blocks?
    Why not ‘/var/www/’ ?

    • Cloudbooklet Reply

      In case if you wish to make a setup for multiple websites in same server with chroot jail setup, this kind of setup will be useful by running PHP-FPM with the respective username

  2. buddhaflow Reply

    PHP did not work for me until I also included the following line in the PHP FPM server block:

    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

    I put it under ‘ include fastcgi_params;’

    Made it wasn’t able to ‘include fastcgi_params;’ for some reason?

    PHP 7.3 Ubuntu 18.04.3

    • Cloudbooklet Reply

      Please try adding the line in /etc/nginx/fastcgi_params

  3. Got this error trying to make server blocks work

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: [emerg] open() “/home/deletedusername/deleteddomain.com/logs/error.log” failed (2: No such file or directory)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    when i do
    ls -l /var/log/nginx/
    total 8
    -rw-r—– 1 www-data adm 2242 Nov 12 06:03 access.log
    -rw-r—– 1 www-data adm 262 Nov 12 06:41 error.log

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