What is Nginx?
Nginx (pronounced ‘engine X’) is an alternative to Apache and is considered to be one of the most popular HTTP web servers in the world. As opposed to Apache, Nginx tends to consume fewer resources and improves server responsiveness. Its event-driven design is what makes it resource-friendly.
Above all, it allows admins to set up advanced configurations and can deal with a high load of concurrent connections. Besides being a good fit for an HTTP web server, Nginx also works as a reverse proxy, load balancer, and standard mail server.
In this article, you will learn how to install and configure Nginx on CentOS 7.
- A CentOS self-managed server or VM
- A Domain. You will need to connect a domain to your Nginx web server
- Sudo or root privileges [root@user ~]
- SELinux set up properly
How to Install Nginx on CentOS 7
Generally, CentOS is the preferred distribution package in the hosting industry. Currently, CentOS 8 is the latest version, while CentOS 7 is supported until the year 2024.
The configuration procedure below details the steps necessary to set up Nginx on CentOS 7.
For installation instructions for CentOS 8, please read How to Install Nginx on CentOS 8.
Step 1: Update Repository Package Lists
To do so, run the following command:
sudo yum -y update
-y is an optional parameter. It serves to avoid confirmation questions. We will be using it a lot, as you will notice. If you do not use this parameter, you will be prompted to confirm your commands.
Step 2: Install Extra Packages for Enterprise Linux (EPEL)
Nginx is not available in the standard repositories that come with the CentOS package, so you will need to install the EPEL repository on your server. EPEL is free to use and provides numerous open-source packages to install with Yum.
To install EPEL, run the following command using the Yum package manager:
sudo yum install -y epel-release
Step 3: Install Nginx
Step number two has added the Nginx repository to your server. Now, you can install Nginx by running the following yum command:
sudo yum –y install nginx
Step 4: Start Nginx Service
Your instance of Nginx is installed, but it won’t start automatically.
To start Nginx, run:
sudo systemctl start nginx
After you hit enter, you will not get a return value. However, Nginx should have started. To check its status, run:
sudo systemctl status nginx
There should be a green piece of text that reads ‘active (running).’ If you can’t find it, your instance of Nginx might not have started successfully.
Note: If you already have an Apache server running, you will need to disable it before starting Nginx. Use the
sudo service httpd stop command. Bear in mind that disabling Apache will bring down any currently hosted website.
You disabled Apache, but it still might start automatically during server reboot. Disable automatic starts by running the following command:
sudo systemctl disable httpd
Step 5: Configure Nginx to Start on Boot
Most admins will want to make sure that NGINX starts up automatically whenever the server restarts. To set this up, run:
sudo systemctl enable nginx
Step 6: Configure Firewall to Allow Traffic
CentOS 7 enables firewalls by default and blocks access to ports 80 and 443. It will block any inbound HTTPS and HTTP packets from Nginx.
To allow HTTP and HTTPS traffic, run the following commands:
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
After each command, you should see
success indicating that the command was executed correctly.
Step 7: Verify Nginx Install
The easiest way to check whether Nginx is running properly is by visiting your server’s public IP address. Just open your web browser and visit http://server_IP_or_domain_name/
First, find your server’s public IP address.
Our IP address is 192.168.122.1/24. Copy your IP address and paste it into your browser. This should load the Welcome to Nginx page.
How to Resolve the ‘test failed’ Error
If you receive a ‘test failed’ error message for the nginx.conf file, you might be facing an IP address issue.
The Nginx service listens to IPv4 and IPv6, by default. Your test will fail if your server doesn’t support IPv6. However, this can be fixed by modifying the main configuration file.
Open the main configuration file, /etc/nginx/nginx.conf. Find and comment out the following line:
listen [::]:80 default_server;
Just add ‘#’ at the beginning of the line. It should look like this:
# listen [::]:80 default_server;
Save the changes you have made and reload the Nginx service.
sudo systemctl reload nginx
Browse to your server’s IP address in your browser. You should see the default Nginx test page.
Nginx Configuration Files and Root
You will most definitely need to know the location of Nginx configuration files and the default Nginx server root directory.
Additional Server Blocks
On Apache, admins use virtual hosts to run multiple websites. With Nginx, running several websites on a single server is accomplished with server blocks.
Additional server blocks are added by creating new configuration files with a .conf file extension. Place these files in /etc/nginx/conf.d and they will be loaded each time Nginx starts.
Default Nginx Server Root
The default Nginx server root directory is /usr/share/nginx. This is specified in the default server block configuration file, located at /etc/nginx/conf.d/default.conf.
The default server document root directory which contains web files is usr/share/nginx/html.
Global configurations can be tweaked by modifying the main Nginx configuration file located at /etc/nginx/nginx.conf. This configuration file is broken down into contexts. By default, you can identify three (3) contexts.
- Events are global settings that define how Nginx handles connections in general.
- HTTP defines how the server handles HTTP and HTTPS connections.
- Server is defined within the HTTP context. It specifies server ports, document root, etc.
You can always add additional contexts.
Managing Nginx – Common Tasks
To stop an Nginx server, run:
sudo systemctl stop nginx
To restart the Nginx service, run:
sudo systemctl restart nginx
If you made some modifications to the Nginx main configuration changes. You need to reload the server to propagate the changes.
sudo systemctl reload nginx
Disable Automatic Start on Boot
If you don’t want Nginx to automatically start on boot, run:
sudo systemctl disable nginx
Configuring a New Directory
If you are hosting multiple websites, a good rule of thumb is to follow standard naming conventions. Let’s use cPanel’s standard naming and create a directory.
sudo mkdir -p /var/www/yourdomain.com/public_html
Next thing you need is an index page. This will help you test the configuration.
sudo nano /var/www/yourdomain.com/public_html/index.html
For testing purposes, input a single line of text in index.html. Save and close the file.
Change Linux file permissions, so that data can be accessed online.
sudo chmod 755 /var/www/yourdomain.com/public_html
Try opening the index.html page. It should be available online.
After successfully installing Nginx on CentOS 7, many opt to fully install LEMP stack, an alternative to the well-known LAMP stack. LEMP is an acronym; each letter stands for a single open-source component.
- L – Linux OS
- E – Nginx (pronounced as you would pronounce ‘engine x’)
- M – MySQL or MariaDB relational database management system
- P – PHP for hosting dynamic websites
Each component ‘sits on top of the other.’ Your Linux OS serves as the base layer.
On top of that sits Nginx, your web daemon. The relational database management system stores all the data processed and served by your web daemon. Finally, PHP allows users to interact with that data.
For newer versions of CentOS, check out our article on installing and configuring Nginx on CentOS 8.