15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
01.11.2024

Comment rediriger HTTP vers HTTPS sur Linux avec Nginx (Guide complet)

Sécuriser votre site web avec HTTPS n’est plus optionnel — c’est une exigence fondamentale pour protéger les données des utilisateurs, maintenir la confiance et obtenir un classement SEO solide. Les moteurs de recherche comme Google pénalisent activement les sites HTTP non chiffrés, tandis que les navigateurs modernes les signalent comme « Non sécurisé ». Rediriger tout le trafic HTTP vers HTTPS garantit que chaque visiteur accède à la version chiffrée de votre site automatiquement, sans aucune intervention manuelle.

Ce guide complet vous guide tout au long du processus : comprendre la différence entre HTTP et HTTPS, installer un certificat SSL gratuit via Let’s Encrypt, configurer une redirection permanente 301 dans Nginx et vérifier que tout fonctionne correctement sur votre serveur Linux.

Table des matières

  1. HTTP vs. HTTPS : Quelle est la différence ?
  2. Prérequis
  3. Étape 1 : Installer un certificat SSL avec Let’s Encrypt
  4. Étape 2 : Configurer Nginx pour rediriger HTTP vers HTTPS
  5. Étape 3 : Tester votre configuration Nginx
  6. Étape 4 : Recharger Nginx pour appliquer les modifications
  7. Étape 5 : Vérifier que la redirection fonctionne
  8. Problèmes courants et dépannage
  9. Conclusion

1. HTTP vs. HTTPS : Quelle est la différence ? {#http-vs-https}

Avant de plonger dans la configuration, il est important de comprendre pourquoi cette redirection est importante.

HTTP (Hypertext Transfer Protocol)

HTTP est le protocole fondamental utilisé pour transmettre des données entre un navigateur web et un serveur. Cependant, il transmet toutes les données en texte brut, ce qui signifie que toute information — identifiants de connexion, détails de paiement, données personnelles — peut être interceptée par des attaquants utilisant une attaque man-in-the-middle (MITM). HTTP n’offre aucune garantie de chiffrement, d’authentification ou d’intégrité des données.

HTTPS (HTTP Secure)

HTTPS est l’extension sécurisée de HTTP. Il enveloppe le protocole HTTP standard dans un chiffrement SSL/TLS, créant un tunnel chiffré entre le client et le serveur. Cela garantit :

  • Confidentialité — Les données ne peuvent pas être lues par des tiers en transit.
  • Intégrité — Les données ne peuvent pas être altérées pendant la transmission.
  • Authentification — Les utilisateurs peuvent vérifier qu’ils communiquent avec le serveur légitime.
  • Avantage SEO — Google utilise HTTPS comme signal de classement, donnant aux sites sécurisés un avantage mesurable.
  • Confiance du navigateur — Chrome, Firefox et Edge affichent une icône de cadenas pour les sites HTTPS et un avertissement « Non sécurisé » pour les sites HTTP.

En résumé : exploiter un site web sans HTTPS dans l’environnement actuel est un risque sérieux pour la sécurité et les affaires.

2. Prérequis {#prerequisites}

Avant de suivre ce guide, assurez-vous d’avoir les éléments suivants en place :

  • Un serveur Linux (Ubuntu 20.04/22.04, Debian 11/12 ou similaire) exécutant Nginx
  • Un nom de domaine enregistré pointant vers l’adresse IP de votre serveur
  • Accès root ou sudo à votre serveur
  • Une familiarité de base avec la ligne de commande Linux

Si vous recherchez un environnement serveur fiable pour héberger votre site web, VPS Hosting d’AlexHost offre des plans VPS Linux entièrement gérés et non gérés optimisés pour les applications web, avec stockage SSD et réseau haute disponibilité.

Vous aurez également besoin d’un certificat SSL valide. Ce guide utilise le certificat gratuit Let’s Encrypt via Certbot. Si vous avez besoin d’un certificat de validation étendue (EV) ou validé par l’organisation (OV) pour un usage professionnel, envisagez d’explorer Certificats SSL d’AlexHost.

3. Étape 1 : Installer un certificat SSL avec Let’s Encrypt {#install-ssl}

Let’s Encrypt est une autorité de certification gratuite, automatisée et ouverte. Certbot est le client officiel qui automatise le processus d’obtention et de renouvellement des certificats SSL/TLS auprès de Let’s Encrypt et configure votre serveur web.

Installer Certbot et le plugin Nginx

Mettez à jour votre index de paquets et installez Certbot ainsi que le plugin Nginx :

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Obtenir et installer votre certificat SSL

Exécutez Certbot avec l’indicateur --nginx pour obtenir automatiquement un certificat et configurer Nginx pour l’utiliser :

sudo certbot --nginx -d example.com -d www.example.com

Remplacez example.com par votre nom de domaine réel. Certbot va :

  1. Vérifier la propriété du domaine via un défi ACME
  2. Obtenir un certificat signé auprès de Let’s Encrypt
  3. Modifier automatiquement votre configuration Nginx pour activer HTTPS sur le port 443
  4. Configurer optionnellement une redirection automatique HTTP vers HTTPS (vous pouvez ignorer cette étape dans Certbot et la configurer manuellement comme indiqué ci-dessous pour un contrôle total)

Activer le renouvellement automatique du certificat

Les certificats Let’s Encrypt expirent tous les 90 jours. Certbot installe un minuteur systemd ou une tâche cron pour gérer les renouvellements automatiquement. Vérifiez qu’il est actif :

sudo systemctl status certbot.timer

Vous pouvez également effectuer un test de renouvellement à sec :

sudo certbot renew --dry-run

4. Étape 2 : Configurer Nginx pour rediriger HTTP vers HTTPS {#configure-nginx}

Avec votre certificat SSL installé, vous devez maintenant configurer Nginx pour rediriger de manière permanente tout le trafic HTTP (port 80) vers HTTPS (port 443). Ceci est fait en utilisant une redirection 301 Moved Permanently, qui est le type de redirection correct pour le SEO — il transfère l’équité des liens vers la version HTTPS de vos pages.

Ouvrir votre fichier de configuration du bloc serveur Nginx

Les configurations de site Nginx sont généralement stockées dans /etc/nginx/sites-available/. Ouvrez le fichier de configuration pour votre domaine :

sudo nano /etc/nginx/sites-available/example.com

Configurer le bloc de redirection HTTP vers HTTPS

Votre fichier de configuration contiendra un ou plusieurs blocs server. Localisez le bloc qui écoute sur le port 80 (HTTP) et remplacez-le ou mettez-le à jour avec la règle de redirection suivante :

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Permanently redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}

Votre bloc serveur HTTPS (port 443), que Certbot a probablement configuré automatiquement, devrait ressembler à ceci :

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/example.com/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

> Pourquoi utiliser return 301 au lieu de rewrite ?

> La directive return 301 est plus rapide et plus efficace qu’une règle rewrite. Elle retourne immédiatement la réponse de redirection sans obliger Nginx à traiter des blocs de localisation supplémentaires, réduisant la surcharge du serveur et améliorant le temps de réponse.

Comprendre la directive de redirection

ComposantExplication
listen 80Nginx écoute les connexions entrantes sur le port HTTP 80
listen [::]:80Active le support IPv6 sur le port 80
server_nameDéfinit les noms de domaine auxquels ce bloc s’applique
return 301Émet une redirection permanente (meilleure pour le SEO)
https://$hostPréserve le nom d’hôte original dans la redirection
$request_uriPréserve le chemin URI complet et la chaîne de requête

5. Étape 3 : Tester votre configuration Nginx {#test-nginx}

Ne rechargez jamais ou ne redémarrez jamais Nginx sans tester votre configuration d’abord. Une erreur de syntaxe dans votre fichier de configuration causera l’échec du démarrage de Nginx, mettant votre site web hors ligne.

Exécutez le test de configuration Nginx intégré :

sudo nginx -t

Un test réussi produit la sortie suivante :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si vous voyez des erreurs, examinez attentivement la sortie. Nginx indiquera le fichier et le numéro de ligne où le problème a été détecté. Les problèmes courants incluent :

  • Points-virgules manquants à la fin des directives
  • Accolades non fermées {}
  • Chemins de fichiers incorrects pour les certificats SSL
  • Entrées server_name en double

Corrigez les erreurs signalées avant de continuer.

6. Étape 4 : Recharger Nginx pour appliquer les modifications {#reload-nginx}

Une fois le test de configuration réussi, rechargez Nginx pour appliquer vos modifications. L’utilisation de reload au lieu de restart est préférable car elle applique la nouvelle configuration gracieusement sans abandonner les connexions actives :

sudo systemctl reload nginx

Pour confirmer que Nginx fonctionne correctement après le rechargement :

sudo systemctl status nginx

Vous devriez voir active (running) dans la sortie.

7. Étape 5 : Vérifier que la redirection fonctionne {#verify-redirect}

Avec Nginx rechargé, il est temps de confirmer que la redirection fonctionne correctement.

Méthode 1 : Test du navigateur

  1. Ouvrez votre navigateur web.
  2. Accédez à http://example.com (en utilisant HTTP, pas HTTPS).
  3. Observez que le navigateur vous redirige automatiquement vers https://example.com.
  4. Confirmez que l’icône de cadenas apparaît dans la barre d’adresse, indiquant une connexion SSL valide.

Méthode 2 : Test en ligne de commande avec curl

Utilisez curl avec l’indicateur -I pour récupérer uniquement les en-têtes de réponse HTTP sans télécharger le corps de la page :

curl -I http://example.com

Une redirection correctement configurée produit la réponse suivante :

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-alive

Indicateurs clés à vérifier :

  • Code de statut 301 Moved Permanently — Confirme qu’une redirection permanente est en place.
  • Location: https://example.com/ — Confirme que le trafic est redirigé vers la version HTTPS.

Méthode 3 : Vérificateur de redirection en ligne

Vous pouvez également utiliser des outils en ligne gratuits tels que redirect-checker.org ou httpstatus.io pour tracer la chaîne de redirection complète et confirmer qu’il n’y a pas de boucles de redirection ou de sauts inutiles.

8. Problèmes courants et dépannage {#troubleshooting}

Boucle de redirection

Symptôme : Le navigateur affiche une erreur « Trop de redirections ».

Cause : Votre bloc serveur HTTPS déclenche également une redirection vers HTTP, créant une boucle infinie.

Correction : Assurez-vous que la directive return 301 existe uniquement dans le bloc serveur HTTP (port 80), pas dans le bloc HTTPS (port 443).

Avertissements de contenu mixte

Symptôme : L’icône de cadenas affiche un avertissement même après que la redirection fonctionne.

Cause : Vos pages HTML font toujours référence à des ressources HTTP (images, scripts, feuilles de style) en utilisant des URL http://.

Correction : Mettez à jour toutes les URL de ressources internes pour utiliser https:// ou des URL relatives au protocole (//). Utilisez un plugin comme Really Simple SSL pour les sites WordPress.

Certificat SSL non trouvé

Symptôme : Nginx ne démarre pas avec une erreur concernant des fichiers de certificat manquants.

Cause : Les chemins spécifiés dans ssl_certificate et ssl_certificate_key ne correspondent pas aux emplacements réels des fichiers de certificat.

Correction : Vérifiez les chemins des certificats avec :

sudo ls /etc/letsencrypt/live/example.com/

Le renouvellement de Certbot échoue

Symptôme : Le renouvellement automatique échoue avec une erreur de connexion.

Cause : Le port 80 peut être bloqué par un pare-feu, empêchant le défi HTTP-01 de Let’s Encrypt de se terminer.

Correction : Assurez-vous que le port 80 est ouvert dans votre pare-feu :

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

9. Conclusion {#conclusion}

Rediriger HTTP vers HTTPS sur votre serveur Linux en utilisant Nginx est une tâche de configuration simple mais critiquement importante. En implémentant une redirection permanente 301, vous garantissez que chaque visiteur — indépendamment de la façon dont il accède à votre site — est automatiquement servi la version chiffrée et sécurisée. Cela protège les données sensibles des utilisateurs, renforce la confiance des visiteurs, satisfait les exigences de sécurité des navigateurs modernes et offre un avantage SEO mesurable.

Pour récapituler les étapes clés couvertes dans ce guide :

  1. Installez
15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer