Coding Nginx Ubuntu

Set Up Let’s Encrypt with Nginx Server Blocks on Ubuntu 16.04

Set Up Let’s Encrypt with Nginx Server Blocks on Ubuntu 16.04


Certificate Authority (CA) that gives a straightforward thanks to getting and install free TLS/SSL certificates, thereby enabling encrypted HTTPS on network servers.

It simplifies the method by providing a software package shopper, Certbot, that tries to change most (if not all) of the desired steps.

Currently, the whole method of getting and putting in a certificate is totally automatic on each Apache and Nginx.

You can use Certbot to get a free SSL certificate for Nginx on Ubuntu sixteen.04 and came upon your certificate to renew mechanically.

This is can use a separate Nginx server block file rather than the default file. we tend to suggest making new Nginx server block files for every domain as a result of it helps to avoid some common mistakes and maintains the default files as a disengagement configuration as supposed. If you would like to line up SSL victimization the default server block, you’ll follow this Nginx + Let’s encipher tutorial instead.


    • One Ubuntu sixteen.04 server came upon by following this primary server setup for Ubuntu sixteen.04 tutorial, together with a sudo non-root user and a firewall.
    • A totally registered name. This tutorial can use throughout. you’ll purchase a website name on Namecheap, get one for free of charge on Freedom, or use the domain registrar of your selection.
    • Both of the subsequent DNS records came upon for your server. you’ll follow this hostname tutorial for details on a way to add them.
      • An A record with informs to your server’s public information science address.
      • An A record with informs to your server’s public information science address.

Nginx put in by following a way to Install Nginx on Ubuntu sixteen.04. A separate Nginx server block file for your domain name upon by following this Nginx server blocks tutorial for Ubuntu sixteen.04. This can be can use /etc/nginx/sites-available/

Set Up Let’s Encrypt with Nginx Server Blocks on Ubuntu 16.04

Step 1: Install in Certbot

  • The commencement to victimization Let’s encipher to get associate SSL certificate is to put in the Certbot software package on your server.
  • Certbot is in terribly active development, that the Certbot packages provided by Ubuntu tend to be superannuated. However, the Certbot developers maintain an Ubuntu software package repository with up-to-date versions, therefore we’ll use that repository instead.
  • First, add the repository.
$ sudo add-apt-repository ppa:certbot/certbot
  • You’ll have to be compelled to press ENTER to just accept. Then, update the package list to choose up the new repository’s package info.
$ sudo apt-get update
  • And finally, install Certbot’s Nginx package with apt-get.
$ sudo apt-get install python-certbot-nginx
  • Certbot is currently able to use, however, so as for it to put together SSL for Nginx, we want to verify a number of Nginx’s configuration.
READ  Java program to check if a binary tree is BST or not

Step 2: Nginx’s Configuration

  • Certbot must be able to notice the proper server block in your Nginx configuration for it to be able to mechanically put together SSL. Specifically, it will this by searching for a server_name directive that matches the domain you request a certificate for.
  • If you followed the requirement tutorial on Nginx server blocks, you must have a server block for your domain at /etc/nginx/sites-available/ with the server_name directive already set fittingly.
  • To check, open the server block file for your domain victimization nano or your favorite text editor.
$ sudo nano /etc/nginx/sites-available/default
  • Find the present server_name line. It should be seen like this:
. . .
. . .
  • If it will, you’ll exit your editor and advance to ensuing step.
  • If it does not, update it to match. Then save the file, quit your editor, and verify the syntax of your configuration edits.
$ sudo nginx -t
  • If you get miscalculation, open up the server block file and check for any typos or missing characters. Once your configuration file’s syntax is correct, reload Nginx to load the new configuration.
$ sudo systemctl reload nginx
  • Certbot will currently realize the right server block and update it.
  • Next, we’ll update our firewall to permit HTTPS traffic.

Step 3: Permit HTTPS through  the Firewall:

  • If you’ve got the ufw firewall enabled, as counseled by the necessity guides, you’ll have to regulate the settings to permit for HTTPS traffic. Luckily, Nginx registers a couple of profiles with ufw upon installation.

You will see this setting by typing:

$ sudo ufw status

It can most likely seem like this, that means that solely HTTP traffic is allowed to the network server:


Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere 
Nginx HTTP ALLOW Anywhere 
OpenSSH (v6) ALLOW Anywhere (v6) 
Nginx HTTP (v6) ALLOW Anywhere (v6)

To additionally let in HTTPS traffic, we can allow the Nginx Full profile and then delete the redundant Nginx HTTP profile allowance:

$ sudo ufw allow 'Nginx Full'
$ sudo ufw delete allow 'Nginx HTTP'

Your status should look like this now:

$ sudo ufw status


Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

We’re currently able to run Certbot and fetch our certificates

READ  PYHTON Programming-Searching for Patterns Set 1 Naive Pattern Searching

Step 4: Getting associate degree SSL Certificate

  • Certbot provides a range of how to get SSL certificates, through numerous plugins. The Nginx plugin can beware of reconfiguring Nginx and reloading the config whenever necessary:
$ sudo certbot --nginx -d -d
  • This runs certbot with the –nginx plugin, victimization -d to specify the names we’d just like the certificate to be valid for.
  • If this is often your initial time running certbot, you may be prompted to enter associate degree email address and comply with the terms of service. when doing thus, certbot can communicate with the Let’s inscribe server, then run a challenge to verify that you just manage the domain you are requesting a certificate for.

If that is productive, certbot can raise however you need to set up your HTTPS settings.


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Select your alternative then hit ENTER. The configuration is updated, and Nginx can reload to select up the new settings. certbot can bring to a close with a message telling you the method was productive and wherever your certificates are stored:


- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/ Your cert will
expire on 2017-10-23. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again with the
"certonly" option. To non-interactively renew *all* of your
certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt:
Donating to EFF:

Your certificates are downloaded, installed, and loaded. strive to reload your website victimization https:// and see your browser’s security indicator. It ought to indicate that the positioning is correctly secured, sometimes with an inexperienced lock icon.

READ  C programming - DFA based division

However, if you take a look at your server victimization the SSL Labs Server take a look at currently, it’ll solely get a B grade thanks to weak Diffie-Hellman parameters. Let’s improve those parameters to bring that grade to associate degree A.

Step 5:  Change Diffie-Hellman Parameters

  • The Diffie-Hellman parameters have an effect on the protection of the initial key exchange between our server and its users. You’ll improve them by making a replacement dhparam.pem file and adding it to your Nginx configuration.

Create the file victimization openssl.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
  • This will take up to a couple of minutes. Once it’s done, open up a replacement configuration go in Nginx’s conf.d directory.
$ sudo nano /etc/nginx/conf.d/dhparam.conf

Paste within the following ssl_dhparam directive. etc/nginx/conf.d/dhparam.conf

$ ssl_dhparam /etc/ssl/certs/dhparam.pem;

Save the file and quit your editor, then verify the configuration

$ sudo nginx -t

Once there aren’t any errors, reload Nginx.

$ sudo systemctl reload nginx

Your website is currently safer. If you take a look at it once more, it ought to receive associate degree A rating. Let’s end by testing the renewal method.

Step 6: Verificatory Certbot Auto-Renewal

Let’s Encrypt’s certificates are solely valid for ninety days. This is often to encourage users to modify their certificate renewal method. The certbot package we tend to put in takes care of this for the U.S. by adding renew scripts to /etc/cron.d. This script runs doubly every day and can mechanically renew any certificate that is inside thirty days of expiration.
To take a look at the renewal method, you’ll do a practice with certbot:

$ sudo certbot renew --dry-run

If you see no errors, you are geared up. Once necessary, Certbot can renew your certificates and reload Nginx to select up the changes. If the automatic renewal method ever fails, Let’s inscribe can send a message to the e-mail you such, warning you once your certificate is near to expire.


In this tutorial, you put in the Let’s inscribe shopper certbot, downloaded SSL certificates for your domain, organized Nginx to use these certificates, and started automatic certificate renewal. If you’ve got more questions on victimization Certbot, their documentation could be a sensible place to begin.

About the author



Wikitechy Founder, Author, International Speaker, and Job Consultant. My role as the CEO of Wikitechy, I help businesses build their next generation digital platforms and help with their product innovation and growth strategy. I'm a frequent speaker at tech conferences and events.