GNU/Linux >> Tutoriels Linux >  >> Linux

Authentification HTTP de base avec Nginx

Ce didacticiel montre comment utiliser l'authentification HTTP de base avec Nginx pour protéger par mot de passe les répertoires de votre serveur ou même tout un site Web. Il s'agit de l'équivalent Nginx de l'authentification HTTP de base sur Apache avec .htaccess /.htpasswd.

1 Remarque préliminaire

J'utilise le site Web www.example.com ici avec la racine du document /var/www/www.example.com/web/ et le fichier de configuration Nginx vhost /etc/nginx/sites-enabled/www.example.com. vhost. Le répertoire que je veux protéger par mot de passe est /var/www/www.example.com/web/test/.

2 Création du fichier de mot de passe

Nous avons besoin d'un fichier de mots de passe où les utilisateurs qui devraient pouvoir se connecter sont répertoriés avec leurs mots de passe (sous forme cryptée). Pour créer un tel fichier de mots de passe, nous pouvons soit utiliser l'outil htpasswd d'Apache, soit utiliser le script Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Utilisation de la commande htpasswd d'Apache

Si vous souhaitez utiliser la commande htpasswd d'Apache, vérifiez si elle existe sur votre système :

which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#

Si vous obtenez une sortie comme celle ci-dessus, tout va bien - htpasswd est déjà installé. Si la commande revient sans aucune sortie, htpasswd n'existe pas sur votre système et vous devez l'installer. Sur Debian/Ubuntu, cela fait partie du package apache2-utils que nous pouvons installer comme suit :

apt-get -y install apache2-utils

Je veux créer le fichier de mot de passe /var/www/www.example.com/.htpasswd maintenant et y stocker l'utilisateur falko (vous pouvez donner au fichier de mot de passe le nom que vous voulez - il n'est pas nécessaire de le nommer .htpasswd; je je viens de le nommer .htpasswd car c'est ainsi que les fichiers de mots de passe sont nommés sous Apache) :

htpasswd -c /var/www/www.example.com/.htpasswd falko

Il vous sera demandé un mot de passe pour l'utilisateur falko. Veuillez noter que le commutateur -c fait que le fichier est créé à partir de rien ; s'il n'existait pas auparavant, il sera créé; s'il existait auparavant, il sera écrasé par un nouveau et tous les utilisateurs de l'ancien fichier seront perdus ! Par conséquent, si vous souhaitez ajouter un autre utilisateur sans supprimer tous les utilisateurs existants, utilisez la commande htpasswd sans le commutateur -c :

htpasswd /var/www/www.example.com/.htpasswd till

La dernière commande ajoute l'utilisateur till à /var/www/www.example.com/.htpasswd afin que nous ayons maintenant les utilisateurs falko et till dedans.

2.2 Utilisation du script Python htpasswd.py

Si vous ne voulez pas ou ne pouvez pas utiliser la commande htpasswd d'Apache, vous pouvez utiliser le script Python à partir de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Nous le téléchargeons sur /usr/local/bin et le rendons exécutable comme suit :

cd /usr/local/bin
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py
chmod 755 /usr/local/bin/htpasswd.py

Je veux créer le fichier de mot de passe /var/www/www.example.com/.htpasswd maintenant et y stocker l'utilisateur falko (vous pouvez donner au fichier de mot de passe le nom que vous voulez - il n'est pas nécessaire de le nommer .htpasswd; je je viens de le nommer .htpasswd car c'est ainsi que les fichiers de mots de passe sont nommés sous Apache) :

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Veuillez remplacer falkossecret par un mot de passe pour l'utilisateur falko. Veuillez noter que le commutateur -c fait que le fichier est créé à partir de rien ; s'il n'existait pas auparavant, il sera créé; s'il existait auparavant, il sera écrasé par un nouveau et tous les utilisateurs de l'ancien fichier seront perdus ! Par conséquent, si vous souhaitez ajouter un autre utilisateur sans supprimer tous les utilisateurs existants, utilisez la commande htpasswd.py sans le commutateur -c :

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

La dernière commande ajoute l'utilisateur till à /var/www/www.example.com/.htpasswd afin que nous ayons maintenant les utilisateurs falko et till dedans.

3 Configuration de Nginx

Maintenant que nous avons notre fichier de mots de passe en place, il nous suffit de l'ajouter à notre configuration vhost Nginx dans /etc/nginx/sites-enabled/www.example.com.vhost, à l'intérieur du conteneur {} du serveur.

nano /etc/nginx/sites-enabled/www.example.com.vhost

Parce que je veux protéger par mot de passe le répertoire de test à la racine du document, j'utilise location /test {} ici (pour protéger par mot de passe l'ensemble du site Web, vous utiliserez location / {}) :

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]
       location /test {
                auth_basic "Restricted";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]
}

Recharger ensuite Nginx :

service nginx reload

C'est ça! Vous pouvez maintenant accéder à votre répertoire de test dans un navigateur (http://www.example.com/test), et on devrait vous demander un nom d'utilisateur et un mot de passe :

Si vous saisissez le nom d'utilisateur et le mot de passe corrects, l'accès vous sera accordé :

Sinon, vous verrez un message d'erreur 401 Autorisation requise :

  • Nginx :http://nginx.org/
  • Wiki Nginx :http://wiki.nginx.org/
  • Script Python htpasswd.py :http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

À propos de l'auteur

Falko Timme est le propriétaire de Timme Hosting (hébergement web nginx ultra-rapide). Il est le mainteneur principal de HowtoForge (depuis 2005) et l'un des principaux développeurs d'ISPConfig (depuis 2000). Il a également contribué au livre O'Reilly "Linux System Administration".


Linux
  1. nginx - 413 Entité de requête trop grande

  2. Comment installer le serveur HTTP Git avec Nginx sur Ubuntu 16.04

  3. Autorisations de fichiers sous Linux avec exemple

  4. Dépannage de base de Nginx

  5. nginx :[emerg] directive inconnue dans /etc/nginx/sites-enabled/example.com:3

Comment installer TYPO3 8.1 avec Nginx (LEMP) sur Ubuntu 16.04

Comment utiliser GeoIP avec Nginx sur Ubuntu 16.04

Correction de HTTP Basic :accès refusé et erreur d'échec d'authentification fatale avec GitLab

Comment configurer PHP-FPM avec NGINX

Installer WordPress avec Nginx sur Ubuntu 18.04

Comment configurer Nginx avec la prise en charge HTTP/2 sur Ubuntu 18.04