L'authentification basique est le moyen le plus rapide de cacher un site de préproduction, un dossier d'administration ou un outil privé derrière une fenêtre de connexion. Ce guide couvre Apache et Nginx sur votre VPS Linux Infrawire, avec un fichier de mots de passe créé par htpasswd.
📋 Prérequis
- Un VPS Linux (Ubuntu 24.04 / Debian 12 ou AlmaLinux 9 / Rocky 9) avec accès SSH root. L'IP et le mot de passe root sont dans votre espace client.
- Apache ou Nginx servant déjà un site.
- Un certificat HTTPS valide pour
example.com. L'authentification basique envoie le mot de passe encodé en Base64, ce qui n'est pas du chiffrement : ne l'utilisez jamais en HTTP simple.
📦 Installer l'outil htpasswd
La commande htpasswd vient d'un petit paquet, même si vous utilisez Nginx :
Bash# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools
🔐 Créer le fichier de mots de passe
Stockez le fichier en dehors de toute racine web, pour que personne ne puisse le télécharger :
Bashsudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER
-B utilise bcrypt. -c crée le fichier : ne l'employez que pour le premier utilisateur, car sur un fichier existant il écrase tout (destructif). Ajoutez les autres utilisateurs sans -c :
Bashsudo htpasswd -B /etc/htpasswd/example.com USER2
Le serveur web doit pouvoir lire le fichier :
Bash# Debian / Ubuntu (Apache et Nginx tournent sous www-data) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky : groupe apache (Apache) ou nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com
Pour supprimer un utilisateur : sudo htpasswd -D /etc/htpasswd/example.com USER2.
🪶 Option A : Apache avec .htaccess
Placez un fichier .htaccess dans le dossier à protéger, par exemple /var/www/example.com/private/.htaccess :
ApacheAuthType Basic AuthName "Zone restreinte" AuthUserFile /etc/htpasswd/example.com Require valid-user
Les fichiers .htaccess sont ignorés tant que le virtual host ne les autorise pas. Dans votre bloc <Directory> (fichier dans /etc/apache2/sites-available/ sous Debian/Ubuntu, /etc/httpd/conf.d/ sous AlmaLinux/Rocky) :
Apache<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>
Puis testez et rechargez :
Bashsudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky
Si vous préférez éviter .htaccess, placez les quatre lignes d'authentification directement dans un bloc <Directory> ou <Location> : c'est plus rapide et plus sûr.
🚀 Option B : Nginx avec auth_basic
Nginx ne lit pas .htaccess. Ajoutez les directives au bloc server :
Nginx1server { 2 listen 443 ssl; 3 server_name example.com; 4 # lignes ssl_certificate ici 5 6 location /private/ { 7 auth_basic "Zone restreinte"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}
Pour protéger tout le site, placez ces deux lignes dans le bloc server. Pour laisser un chemin public dans un site protégé (par exemple un webhook), ajoutez auth_basic off; dans son propre location. Puis :
Bashsudo nginx -t && sudo systemctl reload nginx
✅ Tester
Sans identifiants vous devez obtenir un 401, avec identifiants un 200 :
Bashcurl -I https://example.com/private/ curl -I -u USER https://example.com/private/
Première réponse attendue :
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Zone restreinte"
curl demande le mot de passe quand vous passez -u USER seul, ce qui évite de le laisser dans l'historique du shell.
🛠️ Dépannage
Aucune fenêtre de connexion sous Apache. AllowOverride vaut encore None, ou le .htaccess est dans le mauvais dossier. Revérifiez le bloc <Directory> et rechargez.
Toujours 401 avec le bon mot de passe. Le fichier n'est pas lisible par le serveur web (vérifiez chown et chmod), ou le chemin dans AuthUserFile ou auth_basic_user_file est faux. Le journal d'erreurs le dit : /var/log/apache2/error.log, /var/log/httpd/error_log ou /var/log/nginx/error.log.
Erreur 500 après l'ajout du .htaccess. Une directive est invalide ou le module nécessaire manque. Lancez sudo apachectl configtest et lisez le message.
Demande de mot de passe en HTTP. Redirigez d'abord le HTTP vers HTTPS, pour que les identifiants ne circulent jamais en clair.
🎉 Votre dossier privé demande maintenant une connexion, avec des mots de passe hachés stockés hors d'atteinte et servis uniquement en HTTPS.