NGINX Verzeichnisschutz
Auf vielfachen Wunsch habe ich in diesem Artikel zusammengefasst wie man den Nginx Verzeichnisschutz einrichtet. Gerade am Raspberry Pi macht der Nginx Webserver sinn, da er schneller als der Apache Webserver läuft und weniger Ressourcen braucht. Vom Funktionsumfang ist er vergleichbar und vor allem für kommerzielle Projekte eine gute Alternative. Dieses Tutorial schließt an meinem Raspberry Pi Nginx Tutorial nahtlos an.
NGINX Verzeichnisschutz
Mit einem Verzeichnisschutz könnt ihr Order die über das Internet erreichbar sind durch eine Benutzername/Passwort Abfrage absichern. Außerdem kann man damit ganze Webseiten hinter einem Login verstecken. Das ist sehr beliebt bei Entwicklungsumgebungen. Ein Verzeichnisschutz hindert nicht nur neugierige Kunden oder Angreifer vor dem Zugriff, auch schützt man damit die Seite Effektiv gegen die Indexierung durch Bots. Nichts ist ärgerlicher als die Abstrafung durch Google wegen Duplicate Content weil das 1:1 Entwicklungssystem auch indexiert wird.
Nginx Konfigurationsdatei
Der Nginx Verzeichnisschutz wird in der Konfigurationsdatei des Webservers eingerichtet. Die Konfugirationsdatei heißt nginx.conf und man findet sie üblicherweise an einem der folgenden Pfade: /etc/nginx, /usr/local/nginx/conf oder /usr/local/etc/nginx. Der tatsächliche Pfad hängt vom jeweiligen Betriebssystem beziehungsweise von dessen Distribution ab. Am Raspberry Pi wird das vermutlich /etc/nginx sein. Achtung für die Bearbeitung benötigen wir root Rechte!
sudo nano /etc/nginx/nginx.conf
In der nginx.conf sind die virtuellen Server definiert und die (falls vorhanden) Domains registriert. Ihr solltet dort für die Webseite folgendes vorfinden:
server { listen 80; servername domain.com www.domain.com; location / { # your normal content } ... }
um nun ein bestimmtes Verzeichnis zu schützen muss lediglich ein neues location Element mit dem Pfad zum Ordner einfügen. Dieses wird dann mit auth_basic konfiguriert. Zum Beispiel so:
location /admin { auth_basic "Admin Login"; auth_basic_user_file /var/www/domain.com/admin/.htpasswd; }
Mit dem auth_basic Element definieren wir einen Text der im Browser Dialog zur Benutzereingabe angezeigt wird. Ich habe einfach „Admin Login“ verwendet, ihr könnt gerne kreativer sein. Im besten Fall erklärt der Text wofür man sich anmeldet – zum Beispiel „geschützter Bereich“ oder so. In der zweiten Zeile wird per user_file ein Pfad zur .htpasswd Datei. In der .htpasswd ist sowohl Benutzername als auch Passwort hinterlegt.
Zusätzliche Sicherheit
Die Benutzername/Passwort Kombination kann man in jeder beliebigen Datei speichern. Eine .htpasswd Datei ist die erste Wahl wenn diese im Webverzeichnis am Server liegt. Verbesserte Sicherheit erreicht man damit, dass diese Datei außerhalb vom Webverzeichnis, also nicht unter /var/www liegt. Ideal ist das nur von root beschreibbare /etc Verzeichnis.
Änderungen umsetzen
Nachdem die Konfigurationsdatei erfolgreich gespeichert wurde kann man die Konfiguration im laufenden Betrieb neu einlesen. Das geht mit folgendem Befehl:
nginx -s reload
Sofern man einen Fehler gemacht hat wird am laufenden Betrieb nichts geändert. Auf der Kommandozeile wird jedoch eine Fehlermeldung ausgegeben. Erst nachdem die Konfiguration erfolgreich übernommen wurde ist sie sofort live über den Webserver abrufbar.
Fazit
Der Nginx Verzeichnisschutz ist recht einfach und schnell eingerichtet. Genau wie beim Verzeichnisschutz unter Apache wird das Benutzername/Passwort Paar in einer .htpasswd Datei abgespeichert. Man kann dort auch beliebig viele Benutzername und Passwörter hinterlegen. Der Verzeichnisschutz eignet sich perfekt für Entwicklungsumgebungen oder in Live Systemen um Passwort geschützte Bereiche wie ein Backend einzurichten.
Welche Erfahrung habt ihr mit Nginx gemacht? Wieso würdet ihr lieber Nginx statt Apache verwenden?
Du hättest noch schreibn können wir man die .htpasswd anlegen kann. Zum Beispiel so:
htpasswd -c .htusers admin
stimmt. Alternativ hilft auch ein online htpasswd Generator.
Hallo, der Verzeichnisschutz funktioniert so wie du es beschrieben hast. Jetzt habe ich aber ein anderes Problem. In einem Verzeichnis das ich so geschützt habe, liegen pdf-Dateien. Wenn ich jetzt den Namen der pdf-Datei kenne und im Browser aufrufe, wird diese trotz Verzeichnisschutz ausgeliefert / angezeigt. Ich habe schon das ganze Wochenende im Netz gesucht aber nicht wirklich eine Lösung dafür/dagegen gefunden. Vielleicht hast du ja eine Idee, wie ich meinem nginx beibringen kann die Dateien in dem Verzeichnis nicht anzuzeigen. Danke und Gruß, Heiko
Hallo, du könntest mal eine zweite location /pfadzurpdf{…} in der Konfiguration machen. Dort kannst du entweder der Zugriff komplett verbieten oder einen weiteren Verzeichnisschutz einrichten.