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

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
