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:
Prerequisites
- Your Compute Engine Instance running.
- For setting up Compute Engine, see the Setting up Compute Engine Instance.
- For installing Nginx and PHP, see how to install LEMP in Compute Engine Instance.
- Domain name is pointed to your virtual machine.
- For setting up Cloud DNS, see the Setting up Google Cloud DNS for your domain.
- 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 sites-available
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. CTRL+X
Y
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.