Mettre en place une authentification HTTP sur nginx

Le serveur d'application nginx est de plus en plus utilisé, c'est un peu le cool kid du moment, notamment grâce à ses excellentes performances et sa configuration plus agréable qu'Apache (JSON vs XML).

Si vous avez un site ou une application qui tourne sous nginx et que vous souhaitez mettre en place une authentification basique HTTP, suivez le guide, voilà comment faire.

Créer des utilisateurs

Tout d'abord nous avons besoins de htpasswd pour gérer notre ficher chiffré d'utilisateurs.
Afin d'accéder à cette commande, nous avons besoin d'installer le paquet apache2-utils.

sudo apt-get install apache2-utils

On peut ensuite créer notre fichier d'utilisateurs. Ce fichier doit se trouver dans un répertoire lisible par nginx. Par exemple le répertoire dans lequel se trouve votre site (le répertoire qui est servi par nginx).

htpasswd -c /var/www/your-website/.htpasswd username

username est le nom de l'utilisateur à créer et /var/www/your-website/ le chemin vers le répertoire de votre site.

L'utilitaire va maintenant vous demander le mot de passe que vous souhaitez donner à cet utilisateur.

New password:
Re-type new password:
Adding password for user username

Si jamais on souhaite ajouter un utilisateur, on utilisera la même commande sans l'option -c. Pour en supprimer un ce sera l'option -D qui sera à utiliser.

Configurer nginx

On va désormais modifier le fichier de configuration de notre sit, normalement présent dans le répertoire etc/nginx/sites-available.

Au niveau de la configuration du répertoire que vous souhaitez protéger, ajoutez les lignes auth_basic "Restricted"; et auth_basic_user_file /var/www/your-website/.htpasswd;.

En modifiant bien sûr le chemin vers le fichier .htpasswd.

Ce qui donne, si vous souhaitez sécuriser le répertoire /toto de votre site www.monsite.com, une configuration qui ressemblera à cela :

server {
       listen 80;
       server\_name www.monsite.com monsite.com;
       root /var/www/your-website/web;
[...]
       location /toto {
                auth\_basic "Restricted";
                auth\_basic\_user\_file /var/www/www.example.com/.htpasswd;
       }
[...]
}

Plus qu'à recharger nginx.

sudo /etc/init.d/nginx reload

Et si désormais vous essayez de vous connecter à n'importe quel page du répertoire /toto de votre site (www.monsite.com/toto), une fenêtre va s'ouvrir et vous demandez de vous identifier ! Une erreur s'affichera si vos identifiants sont incorrects.



Strasbourg, France

Ingénieur en informatique chez Sully Group.