Offre de lancement — -20% sur tous les VPS avec le code NVH20 · Déploiement en 60 secondes
Accueil / Documentation / Installation
Installation

Installer Nginx et un certificat HTTPS Let's Encrypt

Par Équipe NVHCloud 2026-09-18 Lecture : 5 min

Nginx est le serveur web le plus utilisé sur les VPS : léger, rapide, et capable de servir aussi bien un site statique qu'une application PHP, Node.js ou Python. Ce guide l'installe, crée un premier site et le passe en HTTPS avec un certificat Let's Encrypt gratuit et renouvelé automatiquement. Comptez dix minutes sur Ubuntu 24.04 ou Debian 12.

1. Prérequis

  • Un VPS avec un accès root en SSH. Voir premiers pas sur votre VPS.
  • Un domaine dont les enregistrements A (et AAAA si vous avez une IPv6) pointent vers le VPS. Vérifiez-le avant de commencer :
dig +short monsite.fr
dig +short www.monsite.fr

Les deux commandes doivent renvoyer l'adresse IP de votre VPS. Si ce n'est pas le cas, attendez la propagation ou corrigez vos DNS : voir configurer les DNS. Let's Encrypt refusera le certificat tant que le domaine ne pointe pas vers le serveur.

2. Installer Nginx

apt update
apt install -y nginx
systemctl enable --now nginx

Si le pare-feu UFW est actif, ouvrez les ports 80 et 443. Le port 80 doit rester ouvert même après le passage en HTTPS : Let's Encrypt l'utilise pour vérifier le domaine à chaque renouvellement.

ufw allow 'Nginx Full'

En ouvrant http://ADRESSE_IP dans un navigateur, vous devez voir la page « Welcome to nginx ». Pour la configuration du pare-feu, voir configurer UFW.

3. Créer le site

Nginx lit un fichier de configuration par site dans /etc/nginx/sites-available/, activé par un lien dans sites-enabled/. Créez le dossier du site et une page de test :

mkdir -p /var/www/monsite.fr
echo '<h1>Ça marche</h1>' > /var/www/monsite.fr/index.html
chown -R www-data:www-data /var/www/monsite.fr

Puis le fichier /etc/nginx/sites-available/monsite.fr :

server {
    listen 80;
    listen [::]:80;
    server_name monsite.fr www.monsite.fr;
    root /var/www/monsite.fr;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
ln -s /etc/nginx/sites-available/monsite.fr /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
💡 Prenez l'habitude de toujours lancer nginx -t avant reload. En cas d'erreur de syntaxe, Nginx vous indique le fichier et la ligne, et le site en ligne n'est pas interrompu.

Pour une application PHP, reportez-vous à installer WordPress ; pour Node.js, à Node.js avec PM2 et Nginx.

4. Obtenir le certificat

apt install -y certbot python3-certbot-nginx
certbot --nginx -d monsite.fr -d www.monsite.fr --redirect -m [email protected] --agree-tos

Certbot contacte Let's Encrypt, qui vérifie que vous contrôlez le domaine en appelant un fichier temporaire sur le port 80. Une fois le certificat obtenu, Certbot modifie votre fichier Nginx : il ajoute l'écoute sur le port 443, les chemins du certificat, et une redirection permanente du HTTP vers le HTTPS grâce à --redirect.

L'adresse e-mail sert uniquement aux alertes d'expiration, si jamais le renouvellement automatique échouait.

5. Vérifier le renouvellement automatique

Les certificats Let's Encrypt sont valables 90 jours. Le paquet Certbot installe une tâche planifiée qui les renouvelle automatiquement quand il leur reste moins de 30 jours. Vérifiez qu'elle est active, puis simulez un renouvellement :

systemctl list-timers | grep certbot
certbot renew --dry-run

Si la simulation réussit, vous n'avez plus rien à faire. Let's Encrypt a annoncé des durées de validité plus courtes dans les années à venir, ce qui rend cette automatisation indispensable.

Pour recharger Nginx après chaque renouvellement, Certbot le fait déjà avec le plugin Nginx. Si vous utilisez le certificat ailleurs, dans un serveur de messagerie par exemple, ajoutez un script dans /etc/letsencrypt/renewal-hooks/deploy/.

6. HTTP/2 et en-têtes de sécurité

HTTP/2 charge plusieurs fichiers en parallèle sur une seule connexion. La syntaxe dépend de votre version de Nginx, affichée par nginx -v :

# Nginx 1.25.1 et plus récent
listen 443 ssl;
http2 on;

# Nginx 1.24 (Ubuntu 24.04) et plus ancien
listen 443 ssl http2;

Ajoutez ensuite ces en-têtes dans le bloc server HTTPS :

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000" always;
⚠️ L'en-tête Strict-Transport-Security (HSTS) oblige les navigateurs à n'utiliser que le HTTPS pendant la durée indiquée, ici un an. Ne l'activez qu'une fois le HTTPS stable sur tous vos sous-domaines concernés : en cas de retour en arrière, les visiteurs ne pourraient plus accéder au site.

Testez votre configuration avec le service gratuit SSL Labs : un site configuré ainsi obtient la note A.

7. Derrière Cloudflare

Si votre domaine passe par le proxy Cloudflare (nuage orange), la vérification sur le port 80 fonctionne en général, mais deux réglages sont à connaître :

  • Dans Cloudflare, choisissez le mode SSL Full (strict). Le mode « Flexible » laisse le trafic en clair entre Cloudflare et votre serveur, et provoque souvent des boucles de redirection.
  • Si vous activez « Always Use HTTPS » ou des règles de redirection chez Cloudflare, laissez passer le chemin /.well-known/acme-challenge/.

Détails dans Cloudflare : DNS et proxy.

8. Dépannage

MessageCause probableSolution
Timeout during connectPort 80 ferméOuvrez-le dans UFW et vérifiez qu'aucun autre pare-feu ne le bloque.
NXDOMAIN ou DNS problemLe domaine ne pointe pas encore vers le VPSVérifiez avec dig et attendez la propagation.
Invalid response ... 404Un autre bloc server répond à la place du vôtreVérifiez server_name et supprimez le site par défaut.
too many certificates already issuedLimite de Let's Encrypt atteinte après trop d'essaisPatientez, et testez avec --dry-run avant de relancer.

Les journaux détaillés de Certbot se trouvent dans /var/log/letsencrypt/letsencrypt.log.

Questions fréquentes

Le certificat Let's Encrypt est-il vraiment gratuit ?
Oui. Let's Encrypt est une autorité de certification à but non lucratif. Ses certificats sont reconnus par tous les navigateurs et offrent le même chiffrement qu'un certificat payant. Les certificats payants se distinguent surtout par la validation de l'organisation et par la garantie financière, rarement utiles pour un site classique.
Peut-on obtenir un certificat pour tous les sous-domaines ?
Oui, avec un certificat générique pour *.monsite.fr. Il exige une validation par enregistrement DNS plutôt que par le port 80, donc un plugin Certbot compatible avec votre fournisseur DNS, par exemple Cloudflare. Pour quelques sous-domaines, il est plus simple de les lister avec plusieurs options -d.
Que se passe-t-il si le renouvellement échoue ?
Rien d'immédiat : le renouvellement commence 30 jours avant l'expiration et est retenté automatiquement. Si l'échec persiste, vous recevez un e-mail d'alerte à l'adresse indiquée. Les causes habituelles sont un port 80 fermé ou un domaine qui ne pointe plus vers le serveur.
Faut-il laisser le port 80 ouvert après le passage en HTTPS ?
Oui. Il sert à rediriger les visiteurs qui tapent l'adresse sans https, et Let's Encrypt en a besoin pour valider chaque renouvellement. Il ne présente pas de risque tant qu'il se contente de rediriger vers le HTTPS.