Prerequisites
- A system running Ubuntu 18.04
- A user account with sudo privileges
- SSH Access
Steps to Installing Nginx on Ubuntu
Update Software Repositories
ssh [email protected]
Before installing new software, it is strongly recommended to update your local software database. Updating helps to make sure you’re installing the latest and best-patched software available.
Enter the following:
sudo apt update
Allow the process to finish.
Install Nginx on Ubuntu
sudo apt install nginx
This may take some time for the system to download the software packages and install them. Allow it to complete before moving on.
Verify Nginx Service is Running
sudo systemctl status nginx
The system should return a list of information about the Nginx service. The active line indicates whether the service is running or not. If you need to start the service, use the following:
sudo systemctl start nginx
You can also use the following commands in place of start:
-
sudo systemctl stop nginx
– stops the Nginx service
-
sudo systemctl enable nginx
– enables Nginx to load at startup
-
sudo systemctl disable nginx
– prevents Nginx from loading at startup
Allow Nginx Traffic through a Firewall
sudo ufw app list
This should generate a list of application profiles. On the list, you should see four entries related to Nginx:
-
Nginx full
– opens Port 80 for normal web traffic, and Port 443 for secure encrypted web traffic
-
Nginx HTTP
– Opens Port 80 for normal web traffic
-
Nginx HTTPS
– Opens Port 443 for encrypted web traffic
-
OpenSSH
– This is a configuration for SecureShell operations, which allow you to log into a remote server through a secure, encrypted connection
To allow normal HTTP traffic to your Nginx server, use the Nginx HTTP profile with the following command:
sudo ufw allow ‘Nginx HTTP’
To check the status of your firewall, use the following command:
sudo ufw status
It should display a list of the kind of HTTP web traffic allowed to different services. Nginx HTTP should be listed as ALLOW and Anywhere.
Test Nginx in a Web Browser
Enter your system’s IP address in the address bar or type localhost.
Your browser should display a page welcoming you to Nginx.
Define Server Blocks
Nginx is designed to act as a front for multiple servers, which is done by creating server blocks.
By default, the main Nginx configuration file is located at /etc/nginx/nginx.conf. Server block configuration files are located at /etc/nginx/sites-available.
To view the contents of the default server block configuration file, enter the following command in a terminal:
sudo vi /etc/nginx/sites-available/default
This should open the default configuration file in the Vi text editor, which should look something like this:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
[...]
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
[...]
}
- The listen commands tell Nginx which ports to look at for traffic
- Default_server defines this as the block to be delivered unless otherwise specified by the client
- Root determines which directory holds the root directory for the website that’s being served
- Server_name allows you to specify a name for a particular server block, which is used in more advanced configurations
- Location allows you to direct the location where Nginx should route traffic
Create a Sample Server Block
Set up an HTML File
sudo mkdir /var/www/example
Create and open a basic HTML index file to work as a test webpage:
sudo vi /var/www/example/index.html
In the Vi text editor (you can substitute your preferred text editor if you’d like), enter the following:
Welcome to the Example Website!
Save the file and exit.
Set up a Simple Server Block
sudo vi /etc/nginx/sites-available/example.com
This should launch the Vi text editor and create a new server block file.
Enter the following lines into the text file:
server {
listen 80;
root /var/www/example;
index index.html;
server_name www.example.com;
}
This tells Nginx to look at the /var/www/example directory for the files to serve, and to use the index.html file we created as the front page for the website.
Save the file and exit.
Create a Symbolic Link to Activate Server Block
sudo ln –s /s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
This creates a link and enables your test website in Nginx. Restart the Nginx service to apply the changes:
sudo systemctl restart nginx
Start Testing
Nginx should intercept the request, and display the text we entered in the HTML file.
Conclusion