2010-01-06 15 views
16

Ich versuche, grundlegende Authentifizierung mit Nginx in Ubuntu Jaunty arbeiten. In nginx.conf, habe ich diese zwei Zeilen unter dem Server-Kontext:nginx und auth_basic

server { 
    ... 
    auth_basic "Restricted Access"; 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    ... 
} 

Dann apt-get'ed ich apache2-utils htpasswd zu bekommen, die ich verwendet, um die htpasswd-Datei zu erstellen:

htpasswd -d -c /etc/nginx/.htpasswd joe 

Wenn ich versuche, auf die Site zuzugreifen, wird der Authentifizierungsdialog wie erwartet angezeigt, aber wenn ich den Benutzernamen und das Passwort eingegeben habe, wurde das Dialogfeld aktualisiert. Das Passwort scheint mir nicht zu gefallen. Ich habe versucht, htpasswd mit und ohne die Option -d, aber immer noch kein Glück. Es hat sich geweigert zu authentifizieren. Irgendwelche Ideen, was ich falsch mache?

Jede Hilfe wäre willkommen.

+0

Haben Sie den relativen Pfad für "auth_basic_user_file" versucht? – Nakul

+0

@KP können Sie teilen, was das für Sie behoben hat? – codecowboy

Antwort

25

Dinge, die ich würde überprüfen:

  • Berechtigungen für `/ etc/nginx/.htpasswd` - Kann die Datei vom nginx laufenden Rechnung gelesen werden? Sie könnten vorübergehend versuchen, chmod 644 zu verwenden, um sicherzustellen, dass jeder es lesen kann. Wenn das funktioniert, dann können Sie eine geeignete Kombination von `chown`- und` chmod`-Einstellungen aussortieren, so dass nginx und Sie/root es lesen können, andere Benutzer aber nicht (zur Sicherheit).
  • Stellen Sie sicher, dass `htpasswd` den Hash in der richtigen Form erzeugt; Es sind normalerweise 13 alphanumerische Zeichen (zum Beispiel `Benutzername: wu.miGq/e3nro`). Der Befehl kann auch MD5-Hashes generieren, die eher wie folgt aussehen würden: Benutzername: $ apr1 $ hzB2K ... $ b87zlCYMKufOxn9ol5QV4/`diese funktionieren nicht mit nginx.
  • Sehen Sie sich die Debug-Ausgabe von nginx an und überprüfen Sie die Fehlerprotokolle auf Hinweise.
+4

gemäß den Dokumenten unter http: // nginx.org/de/docs/http/ngx_http_auth_basic_module.html "Die Apache-Variante des MD5-basierten Passwortalgorithmus (apr1)" wird jetzt unterstützt – kkurian

+0

Sogar Docs weist darauf hin, dass die "Apache-Variante jetzt unterstützt wird", ich habe dieses Problem nur mit a gelöst PLAIN-Algorithmus. Leider, mit debug anmelden nginx, die Nachricht war immer noch "open()" .htpasswd "fehlgeschlagen (13: Berechtigung verweigert)", das ist wahrscheinlich die interne Ursache des Problems (Blick unter Nginx der Entwickler-Perspektive), ist aber nutzlos wenn Sie versuchen, Fehler zu beheben. –

4

Alter Thread, aber keine Antwort, und gut auf Google verwiesen.

Wenn Sie diesen Fehler erhalten und haben die anderen Vorschläge versucht, überprüfen Sie die Berechtigungen des übergeordneten Ordners Ihrer Htpasswd-Datei: die nginx Benutzer (www-data in der Standardeinstellung) gelesen haben sollte und Berechtigungen ausführen (das hat es für mich behoben).

1

Ein weiterer Fehler, den ich auf Bash traf. Anstatt mein Passwort über die Eingabeaufforderung einzugeben, habe ich die -b Option von htpasswd verwendet, um das Passwort in-line einzugeben.

Ich konnte nicht verstehen, warum ich weiter in Password Mismatch-Fehler lief und verschiedene Verschlüsselungsalgorithmen versuchte. Ich überprüfte mit Curl, dass es funktioniert:

$ curl -u admin:test123$secure https://example.com 

schließlich das Problem Gelüftet sich durch echo

$ echo test123$secure 
test123 

Ich machte den Fehler der Verwendung eines dolar Zeichen ($) in bash, die als interpretiert wurde eine leere Variable, also alles andere auslassen. Dies kann vermieden werden, indem Sie die -b Option fallen lassen und nur die Eingabeaufforderung verwenden, um das Passwort einzugeben.

+0

Downvoters sorgen für einen Kommentar? Ist es eher ein Kommentar als eine Antwort? –

+0

Upvoted, nur wegen der Downvote .. – kev