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

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

Création des fichiers nécessaires au SSL

Pour se faire nous allons utiliser un outils 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.

Executez 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ées

Renommons les pour avoir un nom qui correspond à la norme 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 change la configurations du serveur nginx.

En partant de 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 tous les requêtes fait 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 https.
server_name testblog.local; indique l’url voulu.
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 de nginx il est nécessaire monter les certificats dans le docker, pour se faire, dans la séction voulu ajoutez le chemin. N’oubliez pas non plus le port nécessaire.

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

 

Publicités

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 siteweb testblog.local soit accessible

127.0.0.1 testblog.local

 

 

Publicités

Laisser un commentaire