Code sur écran d'ordinateur

Installation de HTTPS sur une installation de Symfony5, Docker et Nginx

Avant de commencer, il est nécessaire d’avoir suivi les étapes de l’article précédent.

Création des fichiers nécessaires au SSL

Pour ce faire nous allons utiliser un outil très pratique: mkcert.

Il s’agit d’un outil qui permet de créer des certificats utilisables en local sans aucune configuration.

Pour installer mkcert, allez sur github.com/FiloSottile/mkcert#installation.

N’oubliez pas la commande:

mkcert -install

Une fois que cela est fait, créez un dossier dans le dossier nginx avec le nom certs.

Dans mon exemple, j’ai pris testblog.local comme nom de domaine.

Exécutez la commande suivante

mkcert testblog.local
Created a new certificate valid for the following names ?
 - "testblog.local"

The certificate is at "./testblog.local.pem" and the key at "./testblog.local-key.pem" ✅

It will expire on 8 March 2023 ?

Deux fichiers sont maintenant créés

Renommons-les pour avoir un nom qui correspond à la convention pour nginx

mv testblog.local-key.pem testblog.local.key
mv testblog.local.pem testblog.local.crt
testblog.crt

 

 

Configuration Nginx

Maintenant il est temps de changer la configuration du serveur nginx.

En partant du fichier de base de Symfony pour la configuration nginx, il suffit de changer le fichier ainsi:

server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name testblog.local;
    location / {
         return 301 https://$host$request_uri;

    }
}

server {
    listen 443 ssl;
    server_name testblog.local;
    root /var/www/symfony/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        internal;
    }

    location ~ .php$ {
        return 404;
    }

    ssl_certificate     /etc/nginx/certs/testblog.local.crt;
    ssl_certificate_key /etc/nginx/certs/testblog.local.key;

}

Avec la première partie nous redirigeons toutes les requêtes faites en http vers https

server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name testblog.local;
    location / {
         return 301 https://$host$request_uri;

    }
}

Et ensuite dans la deuxième partie

listen 443 ssl; indique que nous écoutons en https.
server_name testblog.local; indique l’URL voulue.
ssl_certificate /etc/nginx/certs/testblog.local.crt; indique le chemin du certificat
ssl_certificate_key /etc/nginx/certs/testblog.local.key; indique le chemin de la clé

Configuration du fichier docker-compose

Dans la section nginx il est nécessaire de monter les certificats dans le docker. Pour ce faire, dans la section voulue ajoutez le chemin. N’oubliez pas non plus le port nécessaire.

nginx:
  volumes:
    - ...
    - ./nginx/certs:/etc/nginx/certs
    - ...
  ports:
    - "80:80"
    - "443:443"

 

Résultat final:

nginx:
  build:
    context: ./nginx
  volumes:
    - ../symfony:/var/www/symfony
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    - ./nginx/sites/:/etc/nginx/sites-available
    - ./nginx/conf.d/:/etc/nginx/conf.d
    - ./nginx/certs:/etc/nginx/certs
  depends_on:
    - php-fpm
  ports:
    - "80:80"
    - "443:443"

Configuration du fichier en local /etc/hosts

Maintenant il faut encore changer le fichier /etc/hosts dans votre machine hôte pour que le site testblog.local soit accessible

127.0.0.1 testblog.local

 

 

Laisser un commentaire