InfrawireLogo InfrawireDocumentation
Appeler

Installer Nginx avec certificat SSL (Certbot)

Ce guide vous apprendra à installer Nginx, configurer un site web et obtenir un certificat SSL gratuit avec Certbot pour sécuriser votre site avec HTTPS.

📋 Prérequis

  • Un serveur VPS avec accès root ou sudo
  • Un nom de domaine pointant vers l'IP de votre serveur (exemple : monsite.com)
  • Les ports 80 (HTTP) et 443 (HTTPS) ouverts dans votre pare-feu

Note : Si vous n'avez pas encore de domaine, vous pouvez tester avec l'IP, mais Certbot nécessite un domaine pour les certificats SSL.

💡 Recommandation d'infrastructure

Nginx et Certbot fonctionnent parfaitement sur nos VPS NVMe qui offrent des performances de disque exceptionnelles pour servir vos sites web rapidement. Les disques NVMe garantissent des temps de réponse optimaux pour vos visiteurs.

🚀 Étape 1 : Installer Nginx

Mise à jour des paquets

Bash
sudo apt update

Installation de Nginx

Bash
sudo apt install nginx -y

Vérifier l'installation

Bash
1# Vérifier que Nginx est installé 2nginx -v 3 4# Vérifier que Nginx est démarré 5sudo systemctl status nginx

Si tout est correct, vous devriez voir active (running).

Autoriser Nginx dans le pare-feu (UFW)

Bash
1# Autoriser HTTP (port 80) 2sudo ufw allow 'Nginx HTTP' 3 4# Autoriser HTTPS (port 443) 5sudo ufw allow 'Nginx HTTPS' 6 7# Vérifier les règles 8sudo ufw status

Tester Nginx

Ouvrez votre navigateur et allez à :

  • http://votre-ip-serveur ou
  • http://votre-domaine.com

Vous devriez voir la page par défaut de Nginx qui confirme que l'installation fonctionne !

📝 Étape 2 : Configurer votre site web

Créer le dossier pour votre site

Bash
1# Créer le dossier (remplacez monsite.com par votre domaine) 2sudo mkdir -p /var/www/monsite.com 3 4# Donner les permissions 5sudo chown -R $USER:$USER /var/www/monsite.com 6sudo chmod -R 755 /var/www/monsite.com

Créer une page HTML simple

Bash
# Créer la page d'index nano /var/www/monsite.com/index.html

Ajoutez ce contenu simple :

HTML
1<!DOCTYPE html> 2<html lang="fr"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Mon Site Web</title> 7</head> 8<body> 9 <h1>Bienvenue sur mon site !</h1> 10 <p>Votre site web fonctionne correctement avec Nginx.</p> 11</body> 12</html>

Sauvegardez avec Ctrl + X, puis Y, puis Entrée.

Créer la configuration Nginx

Bash
# Créer le fichier de configuration sudo nano /etc/nginx/sites-available/monsite.com

Ajoutez cette configuration :

Nginx
1server { 2 listen 80; 3 listen [::]:80; 4 5 server_name monsite.com www.monsite.com; 6 7 root /var/www/monsite.com; 8 index index.html; 9 10 location / { 11 try_files $uri $uri/ =404; 12 } 13}

Important : Remplacez monsite.com par votre vrai nom de domaine dans toutes les occurrences.

Sauvegardez le fichier.

Activer le site

Bash
1# Créer un lien symbolique pour activer le site 2sudo ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/ 3 4# Vérifier la configuration Nginx 5sudo nginx -t

Si vous voyez syntax is ok et test is successful, c'est bon !

Supprimer le site par défaut (optionnel)

Bash
1# Supprimer le site par défaut 2sudo rm /etc/nginx/sites-enabled/default 3 4# Recharger Nginx 5sudo systemctl reload nginx

Tester votre site

Ouvrez votre navigateur et allez à http://votre-domaine.com. Vous devriez voir votre page HTML !

🔒 Étape 3 : Installer Certbot et obtenir un certificat SSL

Certbot est un outil qui permet d'obtenir automatiquement des certificats SSL gratuits de Let's Encrypt.

Installation de Certbot

Bash
# Installer Certbot et le plugin Nginx sudo apt install certbot python3-certbot-nginx -y

Obtenir un certificat SSL

Bash
# Obtenir un certificat SSL pour votre domaine sudo certbot --nginx -d monsite.com -d www.monsite.com

Important : Remplacez monsite.com par votre vrai domaine.

Certbot va vous poser quelques questions :

  1. Email : Entrez votre adresse email (pour les notifications de renouvellement)
  2. Conditions d'utilisation : Acceptez avec A (Agree)
  3. Partager l'email : Choisissez Y (Yes) ou N (No) selon votre préférence
  4. Redirection HTTP vers HTTPS : Choisissez 2 (Redirection automatique recommandée)

Vérifier le certificat

Bash
# Vérifier que le certificat a été créé sudo certbot certificates

Vous devriez voir votre certificat listé avec les dates d'expiration.

Tester votre site HTTPS

Ouvrez votre navigateur et allez à https://votre-domaine.com.

Vous devriez voir :

  • Un cadenas vert 🔒 dans la barre d'adresse
  • Votre site chargé en HTTPS (sécurisé)

Félicitations ! Votre site est maintenant sécurisé avec SSL !

🔄 Étape 4 : Renouvellement automatique du certificat

Les certificats Let's Encrypt expirent après 90 jours. Certbot peut les renouveler automatiquement.

Test du renouvellement automatique

Bash
# Tester le renouvellement automatique sudo certbot renew --dry-run

Si vous voyez The dry run was successful, le renouvellement automatique fonctionne !

Vérifier le service de renouvellement

Certbot crée automatiquement un timer systemd pour renouveler les certificats. Vérifiez-le :

Bash
1# Vérifier le timer 2sudo systemctl status certbot.timer 3 4# Si le timer n'est pas actif, l'activer 5sudo systemctl enable certbot.timer 6sudo systemctl start certbot.timer

Le certificat sera automatiquement renouvelé avant expiration.

📁 Structure de vos fichiers

Voici où se trouvent les fichiers importants :

/var/www/monsite.com/          # Fichiers de votre site web
/etc/nginx/                    # Configuration Nginx
/etc/nginx/sites-available/    # Sites disponibles
/etc/nginx/sites-enabled/      # Sites actifs
/etc/letsencrypt/              # Certificats SSL

✅ Vérification finale

Vérifier que Nginx fonctionne

Bash
1# Statut du service 2sudo systemctl status nginx 3 4# Tester la configuration 5sudo nginx -t

Vérifier que le SSL fonctionne

Bash
1# Voir les certificats 2sudo certbot certificates 3 4# Vérifier la date d'expiration 5sudo certbot certificates | grep "Expiry"

Tester votre site

  • Accédez à https://votre-domaine.com
  • Vérifiez le cadenas vert dans le navigateur
  • Cliquez sur le cadenas pour voir les détails du certificat

🛠️ Commandes utiles

Gestion de Nginx

Bash
1# Démarrer Nginx 2sudo systemctl start nginx 3 4# Arrêter Nginx 5sudo systemctl stop nginx 6 7# Redémarrer Nginx 8sudo systemctl restart nginx 9 10# Recharger Nginx (sans interruption) 11sudo systemctl reload nginx 12 13# Tester la configuration 14sudo nginx -t

Gestion des certificats SSL

Bash
1# Renouveler manuellement tous les certificats 2sudo certbot renew 3 4# Renouveler un certificat spécifique 5sudo certbot renew --cert-name monsite.com 6 7# Voir tous les certificats 8sudo certbot certificates 9 10# Supprimer un certificat 11sudo certbot delete --cert-name monsite.com

Voir les logs

Bash
1# Logs Nginx 2sudo tail -f /var/log/nginx/error.log 3sudo tail -f /var/log/nginx/access.log 4 5# Logs Certbot 6sudo tail -f /var/log/letsencrypt/letsencrypt.log

🆘 Dépannage

Nginx ne démarre pas

Bash
1# Vérifier les erreurs de configuration 2sudo nginx -t 3 4# Voir les logs d'erreur 5sudo journalctl -u nginx -n 50

Le certificat SSL ne s'installe pas

Problème : Certbot ne peut pas vérifier votre domaine.

Solutions :

  1. Vérifiez que votre domaine pointe bien vers l'IP du serveur :

    Bash
    dig monsite.com
  2. Vérifiez que les ports 80 et 443 sont ouverts :

    Bash
    sudo ufw status
  3. Vérifiez que Nginx écoute sur le port 80 :

    Bash
    sudo netstat -tlnp | grep nginx
  4. Assurez-vous que votre configuration Nginx utilise bien le bon server_name

Le site ne charge pas en HTTPS

  1. Vérifiez que le certificat existe :

    Bash
    sudo certbot certificates
  2. Vérifiez la configuration Nginx :

    Bash
    sudo nginx -t sudo cat /etc/nginx/sites-enabled/monsite.com
  3. Assurez-vous que le pare-feu autorise le port 443 :

    Bash
    sudo ufw allow 443/tcp

Erreur 502 Bad Gateway

Cette erreur signifie que Nginx ne peut pas communiquer avec votre application.

Bash
1# Vérifier les logs Nginx 2sudo tail -f /var/log/nginx/error.log 3 4# Vérifier que votre application fonctionne 5sudo systemctl status votre-application

📚 Ressources supplémentaires

❓ Questions fréquentes

Q : Dois-je payer pour un certificat SSL ?
R : Non ! Certbot utilise Let's Encrypt qui offre des certificats SSL gratuits.

Q : Mon certificat expire-t-il ?
R : Oui, après 90 jours, mais Certbot le renouvelle automatiquement.

Q : Puis-je avoir plusieurs sites sur le même serveur ?
R : Oui ! Créez un fichier de configuration pour chaque site dans /etc/nginx/sites-available/.

Q : Comment ajouter un sous-domaine ?
R : Créez une nouvelle configuration Nginx et obtenez un certificat avec sudo certbot --nginx -d sous-domaine.monsite.com.

Q : Que faire si j'ai oublié de renouveler mon certificat ?
R : Certbot le renouvelle automatiquement. Vous pouvez aussi faire sudo certbot renew manuellement.


Votre site web est maintenant sécurisé avec HTTPS ! 🚀🔒