Configuration d'un serveur web Nginx avec SSL

Cette fiche énumère les étapes pour configurer rapidement un serveur web Linux avec Nginx et encryption SSL grâce à Certbot.

1) Créer une entrée DNS de Type A pour le sous-domaine

Exemple pour stuff.devjck.fr : - Type : A - Nom : stuff - Valeur : 12.34.56.178 - TTL : 1/2 heure

Exemple pour pxly.fr : - Type : A - Nom : laisser vide (@) - Valeur : 12.34.56.178 - TTL : 1/2 heure

2) Créer et configurer le dossier web

sudo mkdir /var/www/stuff.devjck.fr
# Remplacer <user> par votre compte sftp :
sudo chown -R <user>:<user> /var/www/stuff.devjck.fr
sudo chmod -R 755 /var/www/stuff.devjck.fr

3) Générer un certificat sur le serveur

Avoir certbot d'installé avec le plugin pour Nginx :

# Si non installé :
sudo apt install certbot
sudo apt-get install python3-certbot-nginx

Générer le certificat :

sudo certbot certonly --nginx -d stuff.devjck.fr

Choisir l’option Nginx Web Server plugin si vous l’utilisez.

4) Configurer Nginx pour pointer vers le dossier web

Éditer la configuration :

sudo vi /etc/nginx/sites-available/default

Important: Avant de configurer le port SSL, il est nécessaire d'avoir la connexion sur le port :80 configurée

# pxly.fr
server {
    listen 80;
    listen [::]:80;

    server_name pxly.fr www.pxly.fr;

    root /var/www/pxly.fr;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Rajouter :

# add to the end
# replace servername and path of certificates to your own one

server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  www.srv.world;
       root         /var/www/html;
       index index.html index.htm index.nginx-debian.html;

       ssl_certificate "/etc/letsencrypt/live/www.srv.world/fullchain.pem";
       ssl_certificate_key "/etc/letsencrypt/live/www.srv.world/privkey.pem";
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;

       location / {
              try_files $uri $uri/ =404;
       }
}

Possibilité de rajouter une ligne add_header Cache-Control "no-cache"; dans location / { } si nécessaire de désactiver le cache serveur.

Relancer Nginx:

sudo systemctl restart nginx

C'est tout ! Votre serveur web est maintenant opérationnel et configuré en SSL.

Annexe

Avec Certbot, vous pouvez :

Voir les certificats du serveur :

sudo certbot certificates

Effacer un certificat :

sudo certbot delete --cert-name example.com