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認証用のファイル }
どこのディレクトリを参照してよいかを明示的に知らせる必要があるようですね。