nginx

Install nginx:

1sudo apt-get install nginx
1sudo apt-get enable --now nginx

Put a website somewhere:

1mkdir /var/www/html/mysite/

Put an index file there:

1vim /var/www/html/mysite/index.html

Make the owner www-data

1chown -R www-data:www-data /var/www/html/mysite/

Make a configuration file for nginx:

1vim /etc/nginx/sites-available/mysite.conf
 1server {
 2        listen 80;
 3        listen [::]:80;
 4        root /var/www/html/mysite;
 5        index index.html index.htm;
 6        server_name mysite.tk;
 7
 8   location / {
 9       try_files $uri $uri/ =404;
10   }
11
12}

Make the site available:

1ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/

Test it's working:

1nginx -t

Troubleshooting

If it's not working, the error message ends with the line number of the problem in the .conf file. If the error message says '4', the error message is probably around line 4.

Check:

  • Missing semicolons
  • Very long website names
    • Fixing this requires uncommenting server_names_hash_bucket_size 64; in /etc/nginx.conf
    • If that doesn't work, try changing '64' in that line to '128'.

DNS

Buy some DNS online, then check it's working.

Once it's working, use certbot:

1apt install certbot

You may need to install an nginx python module:

1apt install python3-certbot-nginx
1domain=example.com
2my_email=me@posteo.uk
3certbot --nginx -d "$domain" --non-interactive --agree-tos -m "$my_email"

When you are asked about redirecting from HTTP to HTTPS, say yes (option "2").

Renewal

Remember to renew the certificate every few months.

Multiple Sites

You can do this with any number of websites at the same time.