Die Konfiguration eine Funktion wie .htaccess in Nginx bietet einen sicheren Zugriffsschutz auf die Inhalte eines Webservers. Die Konfiguration unterscheidet sich dabei gegenüber der auf Apache, denn Nginx geht nicht verzeichnisweise vor wie Apache. Stattdessen wird eine HTTP Basic Authentication im virtuellen Server erstellt und so ein bestimmter Zugriff geschützt.
htpasswd erstellen
Voraussetzung für die Nutzung von Basic Authentication ist eine htpasswd-Datei. In dieser sind Benutzername und Kennwort gespeichert. Mit den apache2-utils kann eine solche Datei erzeugt werden.
sudo apt-get update sudo apt-get install apache2-utils
Nun steht das Kommando htpasswd bereit und es kann eine versteckte .htpasswd Datei in /etc/nginx erstellt werden (Nginx Konfigurations-Verzeichnis). Sofern die Datei noch nicht besteht, muss -c dem Kommando hinzugefügt werden.
sudo htpasswd -c /etc/nginx/.htpasswd paul
Dabei steht paul für den Benutzernamen. Nach dem Kennwort wird nach Ausführung des Befehls gefragt.
root@pi:~# htpasswd -c /etc/nginx/.htpasswd paul New password: Re-type new password: Adding password for user paul
Neue Benutzer können mit
sudo htpasswd /etc/nginx/.htpasswd neuerbenutzer
hinzugefügt werden. Der Inhalt der erzeugten htpasswd-Datei kann mitcat /etc/nginx/.htpasswd
betrachtet werden.
root@pi:~# cat /etc/nginx/.htpasswd paul:$apr1$EB6mT5VV$DW.DLyQK/zIizfP7n3Lds. neuerbenutzer:$apr1$wwlu7qpV$GOFHSsXtsBTONgoBylKlq1
Konfiguration in Nginx
Die Konfiguration in Nginx selbst wird in der /etc/nginx/sites-available/default Datei gemacht.
nano /etc/nginx/sites-available/default
Hier ein Ausschnitt aus der Konfiguration. Wichtig sind dabei die markierten Zeilen. Zuständig für die .htaccess analoge Funktion ist dabei die auth_basic Anweisung.
server { listen 80; # hört auf Port 80 / HTTP Verkehr root /usr/share/nginx/html; # Web-Stammverzeichnis mit HTML und PHP-Dateien index index.html index.htm index.php; server_name domain.de; # Domain für diese Server-Anweisung auth_basic "Restricted"; # Ausgabe-Meldung bei Zugriff auth_basic_user_file /etc/nginx/.htpasswd; # Pfad zur .htpasswd-Datei location / { try_files $uri $uri/ =404; } location ~ /.ht { deny all; # Verweigert Zugriff auf die .ht-Dateien } }
Abschließend muss die Konfiguration von Nginx neu geladen werden. Erst dann werden die Änderungen wirksam.
/etc/init.d/nginx reload
Ergebnis der Authentifizierung
Wird nun versucht auf das Webverzeichnis zuzugreifen, kommt die Authentifizierung von Nginx.
Schlägt die Authentifizierung fehl, wird der Zugriff verweigert. Ist die Anmeldung erfolgreich, wird der Zugriff auf die Seite gewährt.
Hi,
das hat leider garnichts mit .htaccess zu tun 😉
Was Du beschreibst ist Basic Auth, das funktioniert natürlich auch mit nginx.
Es wird aber eben nicht über eine .htaccess Datei konfiguriert wie beim Apache, sondern über die globale Konfigurationsdatei.
Joa. Trotzdem danke für die Mühe!
Es gibt ein Lua-Modul für nginx, das .htaccess emuliert:
https://github.com/e404/htaccess-for-nginx
Ich möchte nicht das die Startseite durch eine htassecc geschützt wird sondern eine Untermenue also eine zweite Seite auf die verlinkt wird. Wie geht das ?
Hallo,
einfach die beiden nötigen Zeilen (auth_basic…) in einen „location“-Block des Untermenüs einfügen. Bsp.:
location /untermenu/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
Gruß
Willy
Ich bekomme leider einen Fehler beim reload des ngnix
"$ /etc/init.d/nginx reload
[....] Reloading nginx configuration (via systemctl): nginx.serviceFailed to reload nginx.service: Access denied
failed!"
Warum bzw. Qo liegt der Fehler, wie kann ich diesen beseitigen?
Hallo Manuel, teste deine Konfiguration mal mit
nginx -t"
.Oh ja vielen dank auf so eine ausführliche Anleitung habe ich schon lange gewartet. Bookmark gesetzt, Daumen und und danke nochmal
Hallo,
sehr schöne Anleitung.
Kann ich auch mehrere Unterordner mit je einen Benutzer und Passwort einrichten? Oder brauche ich dafür mehrere .htpasswd-Dateien?
Argh…
Wieso ist das erste Treffer wenn man nach nginx und .htaccess sucht?
Ds hat NIX miteinander zu tun
Hallo,
wie kann ich nur seite mit Passwort schützen kann ?
Danke