Nginx, which is pronounced as ‘engine x’ is a free, opensource and high-performance HTTP server. It is among the most popular web servers that host some largest and most trafficked websites on the internet. Nginx is used as a reverse proxy, load balancing, HTTP cache, and mail proxy. It was developed by Igor Sysoev and publicly released in 2004. Ahead in this article, we will see how to install and use the Nginx server in Linux operating system.
Installing Nginx Server
Based on different package management system and Linux distribution you can choose one of the following commands:
How to Install Nginx on ubuntu / Linux Mint / Debian
To install the Nginx server in Debian based distributions follow the below steps-
First, update your OS repository by using-
sudo apt-get update
Use the following command to install it –
sudo apt-get install nginx -y
and verify your installation by using –
sudo nginx -v
How to Install Nginx on CentOS / Fedora
To install the Nginx server in RPM-based distributions follow the given steps-
First, install the EPEL repository by using –
sudo yum install epel-release
Update OS repository by using –
sudo yum update
and install it by using –
sudo yum install nginx
Verify your installation
sudo nginx -v
How to configure the Firewall to allow Nginx
Enable your firewall to block non-essential ports in your system. You can use the ufw or firewalld firewall applications on Linux.
Configure ufw for Nginx
Check the availability of ufw application profiles by using the following command –
sudo ufw app list
Allow Nginx HTTP with the following command –
sudo ufw allow 'Nginx HTTP'
And verify the changes with –
sudo ufw status
Configure firewalld for Nginx
If not installed, install the firewalld using the below command –
sudo apt-get install firewalld -y or sudo yum install firewalld -y
By default, the firewalld would not be running. You can check the status –
sudo firewall-cmd --state
Start the firewalld service and make an entry to restart the daemon on every reboot –
sudo systemctl start firewalld sudo systemctl enable firewalld
Once installed, add HTTP and https services to the public zone (if you are planning to use the server in a public domain)
sudo firewall-cmd --zone=public --add-service=http and/or sudo firewall-cmd --zone=public --add-service=https
Check the status of the webserver
Check the status of Nginx webserver in your system by using the following command-
systemctl status nginx
Now open your browser and enter your server IP or URL to test the working of the Nginx server.
http://your_server_Ip
It will display the default landing page of Nginx.
Creating Multiple Virtual Host on A Server?
After installing the server probably you want to host a website. Nginx makes it easy to create virtual hosts that allow you to host multiple websites on a single server. The default root directory for the web is /var/www/html
. You will have to place all your website files inside this directory. Now, If you want to run multiple websites on a single server then you can create unique directories inside the root directory. For example – Suppose I have two websites www.example.com and www.example2.com to host.
Please use your own domains in place of using example.com and example2.com
And follow the steps given below to host and configure them –
- Go to the web’s root directory –
cd /var/www/html
- Create two unique directories –
sudo mkdir example.com example2.com
- Create an index file in both the directories –
cd example.com
sudo nano index.html
Enter some text here-
And then press ctrl+s to save and ctrl+x to exit from the text editor. now move into the second directory and create an index file for it.
cd .. cd example2.com sudo nano index.html
Add some text in this file
press ctrl+s to save and ctrl+x to exit from text editor.
- Change the ownership –
chown -R $user:$user /var/www/html/example.com chown -R $user:$user /var/www/html/example2.com
- Create and edit web’s root directory for each –
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.conf
Edit the example2.conf configuration file with a text editor –
sudo nano /etc/nginx/sites-available/example.conf
Change the root directory to /var/www/html/example2.com and insert the server name as given below.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example2.conf
now edit the example2.conf configuration file with a text editor –
sudo nano /etc/nginx/sites-available/example2.conf
Change the root directory to /var/www/html/example2.com and insert the server name as given below.
- Remove default server block file
sudo rm /etc/nginx/sites-enabled/default
- Enable the newly created files
ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/example2.conf /etc/nginx/sites-enabled/
Now you can check the status of Nginx configuration by –
sudo nginx -t
- Restart the Nginx services
systemctl restart nginx
- Edit your host file
sudo nano /etc/hosts
and add your domains with IP of the server
Test Websites In The Browser
You can test your websites in a web browser by entering URL like given below –
http://www.example.com http://www.example2.com
This will display the message typed in the index file of both domains if the server configuration is done appropriately.
Apache Vs Nginx: What are the key differences?
APACHE | NGINX |
---|---|
apache is also known as httpd | It is pronounced as ‘engine x’ |
Developed and maintained by an open community of developer under Apache software foundation | It is also community supported but it also offers commercial product Nginx plus |
Implies a process-driven approach | Nginx implies an event-driven approach |
Create a new thread for each request | It handles multiple requests within one thread |
Apache handles static content using its conventional file-based method | Nginx is faster than the apache in serving static content |
It processes dynamic content within the server | It can’t process dynamic content within the server as apache does |
Apache fully supports all Unix like operating systems as MS windows | Supports all Unix like operating system and partially Microsoft windows |
Apache supports customization of web server through the dynamic modules | It is not flexible enough to support dynamic modules and landing |
I hope this article is useful to you. If you have a query regarding the topic you can write to us in the comments below.