Setup Nginx on Ubuntu for Static Website

December 18, 2018

Install

Install nginx

sudo apt install nginx

or

sudo apt-get install nginx

NOTE: apt vs apt-get

Check status

systemctl status nginx

Allow Firewall

Check firewall application list.

sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Allow nginx in firewall (both HTTP and HTTPS)

sudo ufw allow 'Nginx Full'

Check status

sudo ufw status

Nginx Configuration

Edit nginx configuration.

cd /etc/nginx/sites-available
sudo nano NGINX_CONFIG_FILE
server {
  listen 80;
  listen [::]:80;

  root /var/www/MY_HTML_DIRECTORY;

  server_name WWW.MYDOMAIN.COM;


  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
  }

  # gzip
  gzip on;
  gzip_disable "msie6";
  # only gzip if file size >= 256
  gzip_min_length 256;
  # gzip javascript, css, text (include html as well)
  gzip_types text/plain application/javascript text/css;

  # enable client-side caching by file extension
  location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 1y;
    add_header Cache-Control public;
    access_log off;
  }

  # enable client-side caching by directory
  location ~ ^/(static|img|css|js)/ {
    expires 1y;
    add_header Cache-Control public;
    access_log off;
  }
}

NOTE: You can put your website in other directory besides /var/www/*.

Link site-enabled to sites-available.

cd ../sites-enabled
ln -s ../sites-available/NGINX_CONFIG_FILE

Reload nginx

sudo nginx -s reload

Enable SSL

Easiet way is to use let’s encrypt, which not only get you an SSL certificates which automatically renew, it also automatically setup nginx’s ssl configuration.

Enable HTTP/2

After setup SSL, edit NGINX_CONFIG_FILE.

server {
    listen [::]:443 ssl http2; # managed by Certbot
    listen 443 ssl http2; # managed by Certbot
}

Reload nginx

sudo nginx -s reload

NOTE: HTTP/2 allows browsers to request files in parallel, and only works with SSL.

This work is licensed under a
Creative Commons Attribution-NonCommercial 4.0 International License.