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
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"
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