Julio's Blog



Installing and configuring Nginx on CentOS.

In the web server world, you could find multiple options. Some of the most popular web servers are:

... and a few more.

Nginx has gain market shared in this space in the last couple years, and part of this success have to do with some important factors like reliability, concurrency, low resource usage and scalability.

In this point, we are going to show how to install and configure Nginx on a CentOS 7 server.

Installing Nginx

There are many ways to install Nginx on CentOS. the easiest and most efficient way is to do it using the EPEL repository. In order to do this:

Install the EPEL repository:

[[email protected] ~]# yum install epel-release -y

Verify that Nginx is available on the system by using yum search :

[[email protected] ~]# yum search nginx 
Loaded plugins: fastestmirror  
epel/x86_64/metalink                               | 13 kB  00:00:00  
epel                                               | 4.4 kB  00:00:00  
(1/2): epel/x86_64/group_gz                        |257 kB  00:00:00
(2/2): epel/x86_64/primary_db                      | 4.1 MB  00:00:00
(1/2): epel/x86_64/updateinfo                      | 337 kB  00:00:00
(2/2): epel/x86_64/pkgtags                         | 1.4 MB  00:00:00
Loading mirror speeds from cached hostfile  
* base: mirrors.tripadvisor.com
* epel: mirror.symnds.com
* extras: mirror.thelinuxfix.com
* updates: mirrors.tripadvisor.com
=============================================================================== N/S matched: nginx ================================================================================
collectd-nginx.x86_64 : Nginx plugin for collectd  
munin-nginx.noarch : Network-wide graphing framework (cgi files for nginx)  
nginx-filesystem.noarch : The basic directory layout for the Nginx server  
owncloud-nginx.noarch : Nginx integration for ownCloud  
nginx.x86_64 : A high performance web server and reverse proxy server  

After verifying that the repository is enabled and the software is available we are going to install it:

[[email protected] ~]# yum install nginx -y

Now, we are going to start and make the service persistent across reboots.

To make the service persistent:

[[email protected] ~]# systemctl enable nginx.service

To start the service:

[[email protected] ~]#systemctl start nginx.service

After this, you need to make sure that you could serve traffic from your server. In order to do that verify that ports 80 and 443 are open on your system firewall.

Configuring Virtual Hosts on Nginx

Virtual Host provides the ability to serve more than one domain from a single server. Nginx has this feature and there are two (2) ways to achieve this on the software.

In this post, I am going to show how to create virtual hosts using the latest method. This is the easiest way to do it and also will not impact the main configuration file for the software.

I am going to create two (2) virtual host, one for www.mysite.com and another one for blog.mysite.com. The image below ilustrates this scenario.

In order to do this, we need to follow the next steps.

Create the directories where the sites will reside:

[[email protected] ~]# mkdir -p /var/www/virtual_hosts/www.mysite.com/{html,logs}

[[email protected] ~]# mkdir -p /var/www/virtual_hosts/blog.mysite.com/{html,logs}

Now we are going to create the configuration files for the virtual hosts. To do that use any text editor.

For the virtual host for www.mysite.com:

[[email protected] ~]# vim /etc/nginx/conf.d/www.mysite.com.conf

The file content will look like this:

server {  
listen  80;  
server_name www.mysite.com mysite.com;  
access_log /var/www/virtual_hosts/www.mysite.com/logs/access.log;  
error_log /var/www/virtual_hosts/www.mysite.com/logs/error.log;

location / {  
    root  /var/www/virtual_hosts/www.mysite.com/logs/html;
    index index.html index.htm index.php;
    }
}

For the second virtual host, we repeat the same process, and name the file blog.mysite.com:

server {  
listen  80;  
server_name blog.mysite.com www.blog.mysite.com;  
access_log /var/www/virtual_hosts/blog.mysite.com/logs/access.log;  
error_log /var/www/virtual_hosts/blog.mysite.com/logs/error.log;

location / {  
    root  /var/www/virtual_hosts/blog.mysite.com/logs/html;
    index index.html index.htm index.php;
    }
}

After this we will restart the service:

[[email protected] ~]# systemctl restart nginx.service

Now just add your web content to each of the virtual host directories and verify the functionality. It is really important that you have DNS resolution for the virtual host domains in order for it to work.




Julio is a Principal Cloud Architect at Red Hat working on Linux, Virtualization, Cloud (OpenStack), and Containers.Julio was born in Cuba but now calls home Austin, TX.