Basic HTTP-Authentifizierung mit Nginx

Dieses Tutorial zeigt, wie Sie mit der einfachen HTTP-Authentifizierung mit Nginx Verzeichnisse auf Ihrem Server oder sogar einer ganzen Website mit einem Passwort schützen können. Dies ist das Nginx-Äquivalent zur einfachen HTTP-Authentifizierung auf dem Apache mit .htaccess /.htpasswd.

1 Vorbemerkung

Ich benutze hier die Website www.example.com mit dem Dokumentenstamm /var/www/www.example.com/web/ und der Nginx vhost Konfigurationsdatei /etc/nginx/sites-enabled/www.example.com.vhost. Das Verzeichnis, das ich mit einem Passwort schützen möchte, ist /var/www/www.example.com/web/test/.

2 Erstellen der Passwort-Datei

Wir benötigen eine Passwortdatei, in der Benutzer, die sich anmelden können sollen, mit ihren Passwörtern (in verschlüsselter Form) aufgelistet werden. Um eine solche Passwortdatei zu erstellen, können wir entweder das htpasswd-Tool des Apache verwenden, oder wir verwenden das Python-Skript von http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Verwendung des Befehls htpasswd des Apache

Wenn Sie den Befehl htpasswd des Apache verwenden möchten, überprüfen Sie, ob er auf Ihrem System existiert:

which htpasswd
root@server1:~# which htpasswd
/usr/bin/htpasswd
root@server1:~#

Wenn Sie eine Ausgabe wie die obige erhalten, ist alles in Ordnung – htpasswd ist bereits installiert. Wenn der Befehl ohne Ausgabe zurückgegeben wird, ist htpasswd auf Ihrem System nicht vorhanden und Sie müssen es installieren. Unter Debian/Ubuntu ist es Teil des Pakets apache2-utils, das wir wie folgt installieren können:

apt-get -y install apache2-utils

Ich möchte jetzt die Passwortdatei /var/www/www.example.com/.htpasswd erstellen und den Benutzer falko darin speichern (Sie können der Passwortdatei einen beliebigen Namen geben – es ist nicht notwendig, sie zu benennen.htpasswd; ich habe sie einfach.htpasswd genannt, weil so Passwortdateien unter Apache benannt sind):

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

Sie werden nach einem Passwort für den Benutzer falko gefragt. Bitte beachten Sie, dass der Schalter -c bewirkt, dass die Datei von Grund auf neu erstellt wird; wenn sie vorher nicht existiert hat, wird sie erstellt; wenn sie vorher existiert hat, wird sie mit einer neuen überschrieben, und alle Benutzer aus der alten Datei gehen verloren! Wenn Sie also einen weiteren Benutzer hinzufügen möchten, ohne alle vorhandenen Benutzer zu löschen, verwenden Sie den Befehl htpasswd ohne den Schalter -c:

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

Der letzte Befehl fügt den Benutzer till zu /var/www/www.example.com/.htpasswd hinzu, so dass wir nun die Benutzer falko und till darin haben.

2.2 Verwendung des htpasswd.py Python-Skripts

Wenn Sie den Befehl htpasswd des Apache nicht verwenden wollen oder können, können Sie das Python-Skript von http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py. verwenden.

Wir laden es nach /usr/local/bin herunter und machen es wie folgt ausführbar:

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

Ich möchte jetzt die Passwortdatei /var/www/www.example.com/.htpasswd erstellen und den Benutzer falko darin speichern (Sie können der Passwortdatei einen beliebigen Namen geben – es ist nicht notwendig, sie zu benennen.htpasswd; ich habe sie einfach.htpasswd genannt, weil so Passwortdateien unter Apache benannt sind):

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

Bitte ersetzen Sie falkossecret durch ein Passwort für den Benutzer falko. Bitte beachten Sie, dass der Schalter -c bewirkt, dass die Datei von Grund auf neu erstellt wird; wenn sie vorher nicht existiert hat, wird sie erstellt; wenn sie vorher existiert hat, wird sie mit einer neuen überschrieben, und alle Benutzer aus der alten Datei gehen verloren! Wenn Sie also einen weiteren Benutzer hinzufügen möchten, ohne alle vorhandenen Benutzer zu löschen, verwenden Sie den Befehl htpasswd.py ohne den Schalter -c:

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

Der letzte Befehl fügt den Benutzer till zu /var/www/www.example.com/.htpasswd hinzu, so dass wir nun die Benutzer falko und till darin haben.

3 Nginx konfigurieren

Jetzt, da wir unsere Passwortdatei an Ort und Stelle haben, müssen wir sie nur noch zu unserer Nginx-Vhost-Konfiguration in /etc/nginx/sites-enabled/www.example.com.vhost im Server {}-Container hinzufügen.

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

Da ich das Testverzeichnis im Dokumentenstamm mit einem Passwort schützen möchte, verwende ich hier den Speicherort /test {} (zum Passwortschutz der gesamten Website verwenden Sie den Speicherort / {}):

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;
       }
[...]
}

Laden Sie Nginx anschließend neu:

service nginx reload

Das ist es! Sie können nun in einem Browser (http://www.example.com/test) in Ihr Testverzeichnis gehen, und Sie sollten nach einem Benutzernamen und einem Passwort gefragt werden:

Nginx Basic auth (.htpasswd) Eingabeaufforderung.

Wenn Sie den richtigen Benutzernamen und das richtige Passwort eingeben, erhalten Sie Zugang:

Login ok.

Andernfalls wird eine Fehlermeldung 401 Autorisierung erforderlich angezeigt:

Nginx-Autorisierung erforderlich.

4 Links

Das könnte dich auch interessieren …