Prérequis
Pour configurer HTTPS dans Nginx, vous devez disposer d'un nom de domaine enregistré, d'une résolution DNS correcte et d'un certificat SSL. Des solutions gratuites sont disponibles pour le DNS et le SSL, et l'enregistrement du domaine peut être effectué auprès de votre fournisseur d'hébergement. Ce guide se concentre sur l'intégration du certificat SSL dans Nginx et la résolution des problèmes courants.
Vérification et installation du module SSL pour Nginx
Commencez par vérifier si le module SSL est déjà inclus dans votre installation de Nginx. Exécutez la commande suivante dans le répertoire des exécutables de Nginx :
./nginx -V
La sortie doit inclure --with-http_ssl_module dans les arguments de configuration. Si c'est le cas, passez directement à la section de confiugration. Sinon, suivez les étapes ci-dessous pour recompiler Nginx avec le support SSL.
- Localisez le répertoire source de Nginx, par exemple
/opt/nginx-src-1.21.6. - Accédez à ce répertoire et lancez la compilation avec les modules nécessaires : ```
cd /opt/nginx-src-1.21.6
./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module
- Exécutez la commande
makepour compiler. Si une erreur de typecast between incompatible function typessurvient, éditez le fichierobjs/Makefileet supprimez l'option-Werrorpour éviter que les avertissements ne soient traités comme des erreurs. ``` vi objs/MakefileModifiez la ligne contenant `-Werror` en la retirant ou en la commentant. - Une fois la compilation terminée, n'exécutez pas
make installpour éviter d'écraser l'installation existante. - Sauvegardez l'exécutable Nginx actuel : ```
cp /opt/nginx/sbin/nginx /opt/nginx/sbin/nginx.backup
- Arrêtez le service Nginx : ```
/opt/nginx/sbin/nginx -s stop
- Copiez le nouvel exécutable compilé : ```
cd /opt/nginx-src-1.21.6
cp ./objs/nginx /opt/nginx/sbin/
Confirmez le remplacement si demandé. - Démarrez Nginx : ```
/opt/nginx/sbin/nginx
Configuration du serveur Nginx pour HTTPS
Éditez le fichier de configuration Nginx (par exemple /opt/nginx/conf/nginx.conf) et ajoutez un bloc serveur pour HTTPS. Voici un exemple utilisant le port 8443 au lieu du port par défaut 443 à des fins de test :
server {
listen 8443 ssl;
server_name exemple.fr;
ssl_certificate /etc/ssl/certs/exemple.crt;
ssl_certificate_key /etc/ssl/private/exemple.key;
ssl_session_cache shared:SSL:2m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Pour restreindre l'accès au domaine uniquement et bloquer les accès par IP, ajoutez un bloc serveur par défaut avant les autres configurations :
server {
listen 8443 ssl;
server_name _;
ssl_certificate /etc/ssl/certs/exemple.crt;
ssl_certificate_key /etc/ssl/private/exemple.key;
ssl_session_cache shared:SSL:2m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
return 403;
}
Vérifiez la syntaxe de la configuration et rechargez Nginx pour appliquer les changements :
/opt/nginx/sbin/nginx -t
/opt/nginx/sbin/nginx -s reload