Basic-Authentifizierung mit Benutzername und Kennwort ist eine einfache und einfache Weise zu sichern administrativen panels und backend-services. Nginx kann so konfiguriert werden, schützen Sie bestimmte Bereiche Ihrer website, oder sogar als ein reverse-proxy zu sichern andere Dienste.
Wie Funktioniert die HTTP-Authentifizierung zu Arbeiten?
Im basic-HTTP-Authentifizierung, bestimmte Routen auf dem server sind gesperrt und erfordern einen Benutzernamen und ein Passwort, um Zugang zu Ihnen. Zum Beispiel, der admin-panels der meisten home-Router gesichert sind, auf diese Weise; wenn Sie versuchen, auf Sie zuzugreifen, wird der browser öffnet ein Dialogfenster Anmeldeinformationen.
Wenn ein Benutzer versucht, auf eine geschützte Ressource zuzugreifen, sendet der server dem Nutzer eine WWW-Authenticate-header zusammen mit einem 401 Unauthorized Antwort. Der client sendet den entsprechenden Benutzernamen und das Passwort, gespeichert in der Authorization-header und, wenn Sie mit einer Schlüsseldatei, die Sie eine Verbindung herstellen dürfen.
Da die basic-HTTP-Authentifizierung erfordert das versenden von Passwörtern nach unten den Draht zu können, müssen Sie HTTPS/TLS auf dem server, oder sonst jemand in der Mitte konnte erschnüffeln, das Klartext Passwort. HTTPS verschlüsselt die Verbindung, so dass es sicher zu übertragen. Können Sie ein kostenloses Zertifikat mit LetsEncrypt, oder wenn Sie schauen, um zu sichern, einen privaten server zu erstellen und melden Sie sich ein.
Basic Benutzername/Kennwort-Authentifizierung ist nur eine von vielen Authentifizierungsschemas; andere Allgemeine Schema bearer-Token, die verwendet OAuth 2.0 fließt. Sie können dieses Schema mit Nginx mithilfe des JSON Web Token-Modul, sondern die gesamte Einrichtung ist sehr viel komplexer als Benutzername/Passwort auth.
Generieren Sie ein Passwort-Datei
Sie können die htpasswd zu generieren, Passwort-Dateien. Dies ist wahrscheinlich auf Ihrem system bereits installiert, aber wenn es nicht können Sie es von der apache2-utils Paket. (Nginx verwendet das gleiche Passwort format wie bei Apache):
sudo apt-get install apache2-utils
Erzeugen Sie eine neue Passwort-Datei mit htpasswd mit der Option-c aufrufst, in diesem Fall für den Benutzer “admin”:
sudo htpasswd -c /etc/nginx/.htpasswd admin
Sie werden aufgefordert, ein Kennwort einzugeben, die gehasht und gespeichert, die in /etc/nginx/.htpasswd. Wenn Sie möchten, um mehrere Benutzer hinzufügen, lassen Sie das -c-flag, um neue Einträge hinzuzufügen.
Schalten Sie Basic-HTTP-Authentifizierung
Schützen Sie jede route in nginx mithilfe des auth_basic-Richtlinie innerhalb einer Lage. Zum Beispiel, um mit einem Kennwort schützen /admin, Sie würde diese Position block innerhalb der server-block in der main-nginx-config-Datei (befindet sich normalerweise unter /etc/nginx/nginx.conf):
location /admin {
try_files $uri $uri/ =404;
auth_basic “unzulässige Inhalte”;
auth_basic_user_file /etc/nginx/.htpasswd;
}
Die auth_basic_user_file muss die Richtlinie darauf hin, dass die Passwort-Datei, die Sie erstellt im ersten Schritt. Dies muss nicht benannt werden, nichts besonderes, so können Sie verschiedene Passwort-Dateien für die verschiedenen Strecken.
Nginx sollte den rest erledigen für Sie. Neu starten um die änderungen zu übernehmen:
sudo service nginx restart
Und, überprüfen Sie die geschützte route in Ihrem browser. Sie sollten nach einem Passwort gefragt und der Zugriff verweigert, wenn Sie nicht bieten können.
Mithilfe Der Proxy-Authentifizierung
Ein üblicher Anwendungsfall von basic auth ist die Sicherung eine externe Ressource mit einem nginx reverse proxy. Das funktioniert perfekt mit auth_basic, und ist so einfach wie mit den beiden zusammen:
location / {
#//schalten auth für diese Position
auth_basic “unzulässige Inhalte”;
auth_basic_user_file /etc/nginx/.htpasswd;
#//normale proxy-Konfiguration
proxy_http_version 1.1;
proxy_pass_request_headers auf;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header ” Accept-Encoding “”;
proxy_pass https://<ip-Adresse>;
proxy_redirect Standard;
}
Dies funktioniert durch die Verweigerung jeder Eintrag für den proxy, bevor ein Benutzer authentifiziert. Sobald Sie authentifiziert sind, nginx funktioniert ganz normal.
Allerdings, wenn Sie möchten, führen Sie die auth auf dem server hinter dem reverse-proxy -, ist die Konfiguration komplizierter. Sie werden stattdessen wollen nginx als proxy Ihre Eingabe an den web-server, das könnte zum Beispiel die Abfrage einer Datenbank oder das ausführen komplexer prüfen, als eine einfache Passwort-Datei.
Benötigen Sie die Header-weitere module werden in der Lage, ändern Sie die Kopfzeilen mehr direkt:
location / {
proxy_http_version 1.1;
proxy_pass_request_headers auf;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header ” Accept-Encoding “”;
proxy_pass https://<ip-Adresse>;
proxy_redirect Standard;
more_set_input_headers ‘Authorization: $http_authorization’;
more_set_headers -s 401 ‘WWW-Authenticate: Basic realm=”your_server.com”‘;
}
Die proxy-Konfiguration ist die gleiche, außer es fehlt auth_basic, weil wir nicht wollen, um die Authentifizierung mit nginx. Die more_set_input_headers Richtlinie macht die Magie hier, und das setzen der header für die Kommunikation mit dem web-server der $http_authorization variable wurde es vom client. Diese Art der Benutzername und das Passwort sind vergangen, über nginx in das backend.
Die nächste Zeile ist komplizierter, die regelmäßige Art der Einstellung Kopfzeilen überschreiben, die der realm-variable, wenn es Proxy über nginx, die nicht ideal ist. Mit more_set_headers wird, bewahren Sie diese und zeigen Sie dem Kunden korrekte Informationen.