Nginx BASIC認証通過後に 404 エラーになる

Nginxで 特定のディレクトリにBASIC認証の設定を行い、認証のポップアップが出るようにはなったのですが、認証に通過しても404エラーで Page not foundになってしまいました。

そこにページはあるのに…

これを解決していきます。

動作環境

  • Centos7
  • Nginx 1.17.8

pythonやphpなどは入っていません。
静的HTMLを表示したいだけです。

解決法

まず特定のディレクトリにBASIC認証するには、configにlocation /test/ { }のように記述し、.htpasswdのフルパスを記述する必要があります。
私の環境ではdefault.confでした。

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #BASIC認証
    location /test/ {
      auth_basic "Input username and pass";  # 表示される文字
      auth_basic_user_file /etc/nginx/conf.d/.htpasswd;  # 先ほど作成したBasic認証用のファイル
    }

このままだと、アクセスしてもBASIC認証のポップアップは出るが、認証通過後に404エラーになってしまいます。

以下のようにすると、404エラーが出ずに、BASIC認証もすることが出来ました!

#BASIC認証
    location /test/ {
      root   /usr/share/nginx/html;  #これを追加
      index  index.html index.htm;  #これを追加
      auth_basic "Input username and pass";  # 表示される文字
      auth_basic_user_file /etc/nginx/conf.d/.htpasswd;  # 先ほど作成したBasic認証用のファイル
    }

どこのディレクトリを参照してよいかを明示的に知らせる必要があるようですね。