Home / Linux / How to Install Nginx with Virtual Hosts and SSL Certificate
1541583428 how to install nginx with virtual hosts and ssl certificate - How to Install Nginx with Virtual Hosts and SSL Certificate

How to Install Nginx with Virtual Hosts and SSL Certificate

How to Install Nginx with Virtual Hosts and SSL Certificate

Nginx (brief for Engine-x) is a loose, open supply, robust, high-performance and scalable HTTP and opposite proxy server, a mail and same old TCP/UDP proxy server. It is simple to use and configure, with a easy configuration language. Nginx is now the most well liked internet server tool for powering closely loaded websites, due its scalability and functionality.

In this article is going to talk about how to use Nginx as a HTTP server, configure it to serve internet content material, and arrange name-based digital hosts, and create and set up SSL for protected records transmissions, together with a self-signed certificates on Ubuntu and CentOS.

How to Install Nginx Web Server

First birth via putting in the Nginx bundle from the professional repositories the usage of your bundle supervisor as proven.

------------ On Ubuntu ------------ 
$ sudo apt replace 
$ sudo apt set up nginx 

------------ On CentOS ------------
$ sudo yum replace 
$ sudo yum set up epel-release 
$ sudo yum set up nginx 

After the Nginx bundle is put in, you wish to have to birth the carrier for now, permit it to auto-start at boot time and view it’s standing, the usage of the next instructions. Note that on Ubuntu, it must be began and enabled routinely whilst the bundle is pre-configured.

$ sudo systemctl birth nginx
$ sudo systemctl senable nginx
$ sudo systemctl standing nginx
Start and Check Nginx StatusStart and Check Nginx Status

Start and Check Nginx Status

At this level, the Nginx internet server must be up and working, you’ll check the standing with the netstat command.

$ sudo netstat -tlpn | grep nginx
Check Nginx Port StatusCheck Nginx Port Status

Check Nginx Port Status

If your machine has a firewall enabled, you wish to have to open port 80 and 443 to permit HTTP and HTTPS visitors respectively, via it, via working.

------------ On CentOS ------------
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
$ sudo ufw permit 80/tcp
$ sudo ufw permit 443/tcp
$ sudo ufw reload 

The very best approach for checking out the Nginx set up and checking whether or not it’s working and in a position to serve internet pages is via opening a internet browser and pointing to the IP of the server.


A operating set up must be indicated via the next display screen.

Check Nginx Web PageCheck Nginx Web Page

Check Nginx Web Page

How to Configure Nginx Web Server

Nginx’s configuration information are situated within the listing /and so forth/nginx and the worldwide configuration record is situated at /and so forth/nginx/nginx.conf on each CentOS and Ubuntu.

Nginx is made up of modules which are managed via quite a lot of configuration choices, referred to as directives. A directive can both be easy (within the shape call and values terminated with a ;) or block ( has further directions enclosed the usage of ). And a block directive which accommodates different directives is known as a context.

All the directives are comprehensively defined within the Nginx documentation within the challenge web page. You can refer to it for more info.

How to Serve Static Content Using Nginx in Standalone Mode

At a foundational degree, Nginx can be utilized to serve static content material equivalent to HTML and media information, in standalone mode, the place solely the default server block is used (analogous to Apache the place no digital hosts had been configured).

We will birth via in brief explaining the configuration construction in the primary configuration record.

$ sudo vim /and so forth/nginx/nginx.conf

If you glance into this Nginx configuration record, the configuration construction must seem as follows and that is referred to as the primary context, which accommodates many different easy and block directives. All internet visitors is treated within the http context.

consumer  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;



The following is a pattern Nginx major configuration (/and so forth/nginx/nginx.conf) record, the place the http block above accommodates an come with directive which tells Nginx the place to in finding web page configuration information (digital host configurations).

Nginx Configuration File

consumer www-data;
worker_processes auto;
pid /run/nginx.pid;



Note that on Ubuntu, you’ll additionally in finding an extra come with directive (come with /and so forth/nginx/sites-enabled/*;), the place the listing /and so forth/nginx/sites-enabled/ retail outlets symlinks to the internet sites configuration information created in /and so forth/nginx/sites-available/, to permit the websites. And deleting a symlink disables that specific website online.

Based in your set up supply, you’ll in finding the default web page configuration record at /and so forth/nginx/conf.d/default.conf (in case you put in from professional NGINX repository and EPEL) or /and so forth/nginx/sites-enabled/default (in case you put in from Ubuntu repositories).

This is our pattern default nginx server block situated at /and so forth/nginx/conf.d/default.conf at the check machine.


A short lived clarification of the directives within the above configuration:

  • concentrate: specifies the port the server listens on.
  • server_name: defines the server call which may also be precise names, wildcard names, or common expressions.
  • root: specifies the listing out of which Nginx will serve internet pages and different paperwork.
  • index: specifies the kind(s) of index record(s) to be served.
  • location: used to procedure requests for particular information and folders.

From a internet browser, whilst you level to the server the usage of the hostname localhost or its IP deal with, it processes the request and serves the record /var/www/html/index.html, and instantly saves the development to its get right of entry to log (/var/log/nginx/get right of entry to.log) with a 200 (OK) reaction. In case of an error (failed match), it data the message within the error log (/var/log/nginx/error.log).

Test Nginx Default SiteTest Nginx Default Site

Test Nginx Default Site

To be informed extra about logging in Nginx, you might refer to How to Configure Custom Access or Error Log Formats in Nginx.

Instead of the usage of the default log information, you’ll outline customized log information for various internet websites, as we will have a look at in a while, beneath the phase “putting in place name-based digital hosts (server blocks)”.

How ot Restrict Access to a Web Page with Nginx

In order to prohibit get right of entry to to your web page/utility or some portions of it, you’ll setup elementary HTTP authentication. This can be utilized necessarily to prohibit get right of entry to to the entire HTTP server, particular person server blocks or location blocks.

Start via making a record that can retailer your get right of entry to credentials (username/password) via the usage of the htpasswd application.

$ yum set up httpd-tools		#RHEL/CentOS
$ sudo apt set up apache2-utils	#Debian/Ubuntu

As an instance, let’s upload consumer admin to this record (you’ll upload as many customers as imaginable), the place the -c possibility is used to specify the password record, and the -B to encrypt the password. Once you hit [Enter], you’ll be requested to input the customers password:

$ sudo htpasswd -Bc /and so forth/nginx/conf.d/.htpasswd admin

Then, let’s assign the right kind permissions and possession to the password record (exchange the consumer and crew nginx with www-data on Ubuntu).

$ sudo chmod 640 /and so forth/nginx/conf.d/.htpasswd
$ sudo chmod  nginx:nginx /and so forth/nginx/conf.d/.htpasswd

As we discussed previous on, you’ll prohibit get right of entry to to your webserver, a unmarried web page (the usage of its server block) or particular listing or record. Two helpful directives can be utilized to do so:

  • auth_basic – activates validation of consumer call and password the usage of the “HTTP Basic Authentication” protocol.
  • auth_basic_user_file – specifies the credential’s record.

As an instance, we will be able to display how to password-protect the listing /var/www/html/safe.


Now, save adjustments and restart Nginx carrier.

$ sudo systemctl restart nginx 

The subsequent time you level your browser to the above listing (http://localhost/protected) you’ll be requested to input your login credentials (username admin and the selected password).

A a success login permits you to get right of entry to the listing’s contents, differently you’ll get a a “401 Authorization Required” error.

How to Setup Name-based Virtual hosts (Server Blocks) in Nginx

The server context permits a couple of domain names/websites to be saved in and served from the similar bodily gadget or digital personal server (VPS). Multiple server blocks (representing digital hosts) may also be declared throughout the http context for each and every website online/area. Nginx makes a decision which server processes a request in response to the request header it receives.

We will display this idea the usage of the next dummy domain names, each and every situated within the specified listing:

  • wearetecmint.com – /var/www/html/wearetecmint.com/
  • welovelinux.com – /var/www/html/welovelinux.com/

Next, assign the fitting permissions at the listing for each and every website online.

$ sudo chmod -R 755 /var/www/html/wearetecmint.com/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Now, create a pattern index.html record inside of each and every public_html listing.

	<h1>This is the index web page of www.wearetecmint.com</h1>

Next, create the server block configuration information for each and every website online throughout the /and so forth/httpd/conf.d listing.

$ sudo vi /and so forth/nginx/conf.d/wearetecmint.com.conf
$ sudo vi /and so forth/nginx/conf.d/welovelinux.com.conf

Add the next server block declaration within the wearetecmint.com.conf record.



Next, upload the next server block declaration within the welovelinux.com.conf record.



To follow the hot adjustments, restart the Nginx internet server.

$ sudo systemctl restart nginx

and pointing your internet server to the above addresses must make you notice the primary pages of the dummy domain names.

Test Nginx Virtual Hosts WebsitesTest Nginx Virtual Hosts Websites

Test Nginx Virtual Hosts Websites

Important: If you will have SELinux enabled, its default configuration does no longer permit Nginx to get right of entry to information out of doors of well known approved places (equivalent to /and so forth/nginx for configurations, /var/log/nginx for logs, /var/www/html for internet information and so forth..).

You can deal with this via both disabling SELinux, or atmosphere the proper safety context. For additional info, refer to this information: the usage of Nginx and Nginx Plus with SELinux at the Nginx Plus web page.

How to Install and Configure SSL with Nginx

SSL certificate assist to permit protected http (HTTPS) in your website online, which is very important to organising a relied on/protected connection between the top customers and your server via encrypting the guidelines this is transmitted to, from, or inside your website online.

We will quilt how to create and set up a self-signed certificates, and generate a certificates signing request (CSR) to achieve an SSL certificates from a certificates authority (CA), to use with Nginx.

Self-signed certificate are loose to create and are almost excellent to opt for checking out functions and for inside LAN-only products and services. For public-facing servers, it’s extremely advisable to use a certificates issued via a CA (for instance Let’s Encrypt) to uphold its authenticity.

To create a self-signed certificates, first create a listing the place your certificate will probably be saved.

$ sudo mkdir /and so forth/nginx/ssl-certs/

Then generate your self-signed certificates and the important thing the usage of the openssl command line device.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /and so forth/nginx/ssl-certs/nginx.key -out /and so forth/nginx/ssl-certs/nginx.crt

Let’s in brief describe the choices used within the above command:

  • req -X509 – presentations we’re making a x509 certificates.
  • -nodes (NO DES) – way “don’t encrypt the key”.
  • -days 365 – specifies the choice of days the certificates will probably be legitimate for.
  • -newkey rsa:2048 – specifies that the important thing generated the usage of RSA set of rules must be 2048-bit.
  • -keyout /and so forth/httpd/ssl-certs/apache.key – specifies the overall trail of the RSA key.
  • -out /and so forth/httpd/ssl-certs/apache.crt – specifies the overall trail of the certificates.
Create SSL Certificate and Key for NginxCreate SSL Certificate and Key for Nginx

Create SSL Certificate and Key for Nginx

Next, open your digital host configuration record and upload the next strains to a server block declaration listening on port 443. We will check with the digital host record /and so forth/nginx/conf.d/wearetecmint.com.conf.

$ sudo vi /and so forth/nginx/conf.d/wearetecmint.com.conf

Then upload the ssl directive to nginx configuration record, it must glance identical to under.


Now restart the Nginx and level your browser to the next deal with.

Check Nginx SSL WebsiteCheck Nginx SSL Website

Check Nginx SSL Website

If you want to to acquire an SSL certificates from a CA, you wish to have to generate a certificates signing request (CSR) as proven.

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /and so forth/nginx/ssl-certs/instance.com.key -out /and so forth/nginx/ssl-certs/instance.com.csr

You too can create a CSR from an current personal key.

$ sudo openssl req -key /and so forth/nginx/ssl-certs/instance.com.key -new -out /and so forth/nginx/ssl-certs/instance.com.csr

Then, you wish to have to ship the CSR this is generated to a CA to request the issuance of a CA-signed SSL certificates. Once you obtain your certificates from the CA, you’ll configure it as proven above.

Read Also: The Ultimate Guide to Secure, Harden and Improve Performance of Nginx Web Server


In this newsletter, now we have defined how to set up and configure Nginx; lined how to setup name-based digital website hosting with SSL to protected records transmissions between the internet server and a shopper.

If you skilled any setbacks all through your nginx set up/configuration procedure or have any questions or feedback, use the comments shape under to achieve us.

Check Also

Gates Foundation Spent $200 Million Funding Toilet Research

‘Jeff Bezos is Wrong, Tech Workers Are Not Bullies’

‘Jeff Bezos is Wrong, Tech Workers Are Not Bullies’ Silicon Valley staff have a proper …

Leave a Reply

Your email address will not be published. Required fields are marked *