web-dev-qa-db-ja.com

nginxとauth_basic

UbuntuJauntyのnginxで基本認証を機能させようとしています。 nginx.confで、サーバーコンテキストの下に次の2行を追加しました。

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

次に、Apache2-utilsをapt-getしてhtpasswdを取得しました。これは、htpasswdファイルの作成に使用しました。

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

サイトにアクセスしようとすると、期待どおりに認証ダイアログが表示されますが、ユーザー名とパスワードを入力すると、ダイアログボックスが更新されます。私が提供しているパスワードが気に入らないようです。 -dオプションの有無にかかわらずhtpasswdを実行しようとしましたが、それでもうまくいきませんでした。認証を拒否しました。私が間違っていることについて何か考えはありますか?

どんな助けでもいただければ幸いです。

18
KP.

私がチェックすること:

  • `/ etc/nginx/.htpasswd`の権限-nginxを実行しているアカウントでファイルを読み取ることはできますか?一時的に `chmod 644`を使用して、誰もが読めるようにすることができます。それが機能する場合は、 `chown`と` chmod`の設定の適切な組み合わせを整理して、nginxとあなた/ rootはそれを読み取ることができますが、他のユーザーは読み取ることができません(セキュリティのため)。
  • `htpasswd`が正しい形式でハッシュを生成していることを確認してください。通常は約13文字の英数字です(たとえば、「username:wu.miGq/e3nro」)。コマンドは、「username:$ apr1 $ hzB2K ... $ b87zlCYMKufOxn9ol5QV4 /」のように見えるMD5ハッシュも生成できます。これらはnginxでは機能しません。
  • Nginxのデバッグ出力を増やすことを検討し、手がかりがないかエラーログを確認してください。
26
Nick

古いスレッドですが、答えはなく、Googleでよく参照されています。

このエラーが発生し、他の提案を試した場合は、.htpasswdファイルの親フォルダーのアクセス許可を確認してください。nginxユーザー(デフォルトではwww-data)はおよびexecuteパーミッション(これで修正されました)。

6
personne3000

私がbashで遭遇したもう1つの落とし穴。プロンプトでパスワードを入力する代わりに、htpasswd-bオプションを使用してパスワードをインラインで入力しました。

$ htpasswd -nb admin test123$secure

さまざまな暗号化アルゴリズムを試して、パスワードの不一致エラーが発生し続けた理由が理解できませんでした。私はそれが機能することをcurlで確認しました:

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

最後に、問題はechoを通じて明らかになりました

$ echo test123$secure
test123

空の変数として解釈されたbashでdolar sign($)を使用するのを間違えたため、他のすべてを省略しました。これは、-bオプションを削除し、プロンプトを使用してパスワードを入力するだけで回避できます。

4
Konrad Reiche