nginx auth_basic は HTTPS 経由で動作しますか?

nginx auth_basic は HTTPS 経由で動作しますか?

次のように、SSL ウェブサイトにパスワードで保護されたディレクトリを設定しようとしています。

/etc/nginx/sites-available/デフォルト

server {
    listen 443:
    ssl on;
    ssl_certificate /usr/certs/server.crt;
    ssl_certificate_key /usr/certs/server.key;

    server_name server1.example.com;

    root /var/www/example.com/htdocs/;
    index index.html;

    location /secure/ {
        auth_basic "Restricted";
        auth_basic_user_file /var/www/example.com/.htpasswd;
    }
}

問題は、URL にアクセスしようとするとhttps://server1.example.com/secure/、「404: 見つかりません」というエラー ページが表示されることです。

error.log に次のエラーが表示されます:

011/11/26 03:09:06 [error] 10913#0: *1 no user/password was provided for basic authentication,
client: 192.168.0.24, server: server1.example.com, request: "GET /secure/ HTTP/1.1",
host: "server1.example.com"

ただし、通常の HTTP 仮想ホストに対してパスワードで保護されたディレクトリを問題なく設定できました。

設定に問題があるのでしょうか、それとも何か他の問題があるのでしょうか?

答え1

おそらく、auth_basic_user_file のパスの問題であり、絶対パスが nginx を混乱させています。

http://wiki.nginx.org/HttpAuthBasicModule#auth_basic_user_file

バージョン 0.6.7 以降、ファイル名のパスは nginx 構成ファイル nginx.conf のディレクトリを基準としますが、nginx プレフィックス ディレクトリを基準としません。

他のケースではどのように動作するのかわかりません。ドキュメントからの引用では、次のようなものが必要であることが示唆されています。

auth_basic_user_file htpasswd/www.example.com

サーバー構成ファイルとして「/etc/nginx/nginx.conf」がある場合、パスワード ファイルは「/etc/nginx/htpasswd/www.example.com」になります。

「sudo nginx -t」を実行すると、nginx の設定を確認できます。設定エラーがある場合、つまり、認証ファイルが想定された場所にない場合は、その時点で通知されます。

関連情報