2010-01-06 5 views
16

J'essaie d'obtenir une authentification basique avec nginx dans Ubuntu Jaunty. En nginx.conf, j'ai ajouté ces deux lignes dans le contexte du serveur:nginx et auth_basic

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

Je apache2-utils apt-get'ed pour obtenir htpasswd, que je l'habitude de créer le fichier htpasswd:

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

Lorsque j'essaie d'accéder au site, la boîte de dialogue d'authentification s'affiche comme prévu, mais lorsque j'ai entré le nom d'utilisateur et le mot de passe, il a simplement actualisé la boîte de dialogue. Il ne semble pas aimer le mot de passe que je lui fournis. J'ai essayé d'exécuter htpasswd avec et sans l'option -d, mais toujours pas de chance. Il a refusé de s'authentifier. Des idées de ce que je fais mal?

Toute aide serait appréciée.

+0

Avez-vous essayé le chemin relatif pour "auth_basic_user_file"? – Nakul

+0

@KP pouvez-vous partager ce qui a résolu cela pour vous? – codecowboy

Répondre

25

choses que je vérifierais:

  • autorisations sur `/ etc/nginx/.htpasswd` - Le fichier peut être lu par le compte courant nginx? Vous pouvez essayer, temporairement, en utilisant `chmod 644` pour vous assurer que tout le monde peut le lire. Si cela fonctionne, vous pouvez trier une combinaison appropriée de paramètres `chown` et` chmod` pour que nginx et vous/root puissent le lire, mais pas les autres utilisateurs (pour des raisons de sécurité).
  • Assurez-vous que `htpasswd` génère le hachage dans le bon format; il s'agit généralement de 13 caractères alphanumériques (par exemple, "nom d'utilisateur: wu.miGq/e3nro"). La commande CAN génère aussi des hachages MD5 qui ressembleraient plutôt à un nom d'utilisateur: $ apr1 $ hzB2K ... $ b87zlCYMKufOxn9ol5QV4/`cela ne fonctionne pas avec nginx.
  • Examinez la possibilité d'augmenter la sortie de débogage de nginx et recherchez les indices dans les journaux d'erreurs.
+4

selon les docs à http: // nginx.org/fr/docs/http/ngx_http_auth_basic_module.html "la variante Apache de l'algorithme de mot de passe basé sur MD5 (apr1)" est maintenant supporté – kkurian

+0

Même les points docs que la "variante Apache est maintenant supportée", j'ai seulement résolu ce problème en utilisant un Algorithme PLAIN. Malheureusement, avec le journal de débogage dans nginx, le message était toujours "open()" .htpasswd "failed (13: Permission denied)", qui est probablement la cause interne du problème (sous la perspective du développeur nginx), mais inutile quand vous essayez de dépanner. –

4

Ancien thread, mais pas de réponse, et bien référencé sur Google.

Si vous obtenez cette erreur et ont essayé les autres suggestions, vérifiez les permissions du dossier parent de votre fichier .htpasswd: l'utilisateur nginx (www-data par défaut) doivent avoir lu et exécuter autorisations (ceci l'a arrangé pour moi).

1

Un autre gotcha que j'ai rencontré sur bash. Au lieu d'entrer mon mot de passe via l'invite, j'ai utilisé l'option -b de htpasswd pour entrer le mot de passe en ligne.

$ htpasswd -nb admin test123$secure 

Je ne comprenais pas pourquoi mon je continuais à courir dans des erreurs de non-concordance de mot de passe, en essayant différents algorithmes de chiffrement. Je vérifiais avec boucle que cela a fonctionné:

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

Enfin, le problème se reveiled par echo

$ echo test123$secure 
test123 

J'ai fait l'erreur d'utiliser un signe dolar ($) en bash qui a été interprété comme une variable vide, omettant ainsi tout le reste. Cela peut être évité en supprimant l'option -b et en utilisant simplement l'invite pour entrer le mot de passe.

+0

Downvoters se soucient de commenter? Est-ce plus un commentaire qu'une réponse? –

+0

Upvoted, juste à cause de la downvote .. – kev