htaccess in Nginx einrichten

.htaccess in Nginx einrichten

Die Konfiguration von .htaccess in Nginx bietet einen sicheren Zugriffsschutz auf einem Webserver. Die Konfiguration unterscheidet sich dabei gegenüber der auf Apache.

htpasswd erstellen

Voraussetzung für die Nutzung von .htaccess 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/.htpasswdbetrachtet 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 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

.htaccess Ergebnis

Wird nun versucht auf das Webverzeichnis zuzugreifen, kommt die Authentifzierung über .htaccess in Nginx.

.htaccess Abfrage in Nginx
.htaccess Abfrage in Nginx

Schlägt die Authentifizierung fehl, wird der Zugriff verweigert. Ist die Anmeldung erfolgreich, wird der Zugriff auf die Seite gewährt.

Nginx: Authorization Required
Nginx: Authorization Required

7 Gedanken zu „.htaccess in Nginx einrichten

  1. 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!

  2. 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 ?

    1. 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

  3. 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?

  4. 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?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.