Dieses Tutorial zeigt, wie Sie die grundlegende HTTP-Authentifizierung mit Nginx verwenden können, um Verzeichnisse auf Ihrem Server oder sogar eine ganze Website mit einem Passwort zu schützen. Dies ist das Nginx-Äquivalent zur grundlegenden HTTP-Authentifizierung auf Apache mit .htaccess /.htpasswd.
1 Vorbemerkung
Ich verwende hier die Website www.example.com mit dem Dokumentenstammverzeichnis /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 Erstellung der Passwortdatei
Wir benötigen eine Passwortdatei, in der Benutzer, die sich anmelden können sollen, mit ihren Passwörtern (in verschlüsselter Form) aufgelistet sind. Um eine solche Passwortdatei zu erstellen, können wir entweder das htpasswd-Tool von Apache verwenden, oder wir verwenden das Python-Skript von http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.
2.1 Verwenden des htpasswd-Befehls von Apache
Wenn Sie den htpasswd-Befehl von Apache verwenden möchten, überprüfen Sie, ob er auf Ihrem System vorhanden ist:
which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#
Wenn Sie eine Ausgabe wie die obige erhalten, ist alles in Ordnung - htpasswd ist bereits installiert. Wenn der Befehl ohne Ausgabe zurückkehrt, existiert htpasswd nicht auf Ihrem System 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 darin den Benutzer falko speichern (Sie können der Passwortdatei einen beliebigen Namen geben - es muss nicht .htpasswd heißen; ich habe es einfach .htpasswd genannt, weil Passwortdateien unter Apache so 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 dafür sorgt, dass die Datei von Grund auf neu erstellt wird; wenn es vorher nicht existierte, wird es erstellt; Wenn es vorher existierte, wird es mit einem 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, sodass wir jetzt die Benutzer falko und till darin haben.
2.2 Verwenden des Python-Skripts htpasswd.py
Wenn Sie den htpasswd-Befehl von Apache nicht verwenden möchten oder können, können Sie das Python-Skript von http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.
verwendenWir 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 darin den Benutzer falko speichern (Sie können der Passwortdatei einen beliebigen Namen geben - es muss nicht .htpasswd heißen; ich habe es einfach .htpasswd genannt, weil Passwortdateien unter Apache so benannt sind):
htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret
Bitte ersetzen Sie falkosecret durch ein Passwort für den Benutzer falko. Bitte beachten Sie, dass der Schalter -c dafür sorgt, dass die Datei von Grund auf neu erstellt wird; wenn es vorher nicht existierte, wird es erstellt; Wenn es vorher existierte, wird es mit einem 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, sodass wir jetzt die Benutzer falko und till darin haben.
3 Konfigurieren von Nginx
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 location /test {} (um die gesamte Website mit einem Passwort zu schützen, würden Sie location / {} verwenden):
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; } [...] }
Nginx danach neu laden:
service nginx reload
Das ist es! Sie können jetzt in einem Browser zu Ihrem Testverzeichnis gehen (http://www.example.com/test), und Sie sollten nach einem Benutzernamen und einem Passwort gefragt werden:
Wenn Sie den richtigen Benutzernamen und das richtige Passwort eingeben, erhalten Sie Zugriff:
Andernfalls wird die Fehlermeldung 401 Autorisierung erforderlich angezeigt:
4 Links
- Nginx:http://nginx.org/
- Nginx-Wiki:http://wiki.nginx.org/
- htpasswd.py Python-Skript:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
Über den Autor
Falko Timme ist Der Besitzer von Timme Hosting (ultraschnelles Nginx-Webhosting). Er ist der Hauptbetreuer von HowtoForge (seit 2005) und einer der Kernentwickler von ISPConfig (seit 2000). Er hat auch zum O'Reilly-Buch "Linux System Administration" beigetragen.