LoginSignup
1
0

More than 3 years have passed since last update.

Nginx Basic認証を複数ページに別ユーザでかける

Last updated at Posted at 2021-03-13

まず始めに

 今回やりたかったことは、表題通り。
 NginxのBasic認証を複数ページで別々のユーザ・パスでかける

 ページA(page_a)にユーザ(alpha)・パス
 ページB(page_b)にユーザ(beta)・パスでBasic認証をかけ、
 ページAでユーザ(beta)・ページBにユーザ(alpha)では認証をできないようにしたい。

 まずはBasic認証についてまとめてみました。

 

Basic認証

 Basic認証とはWebサイトの特定のページやファイルにアクセス制限をかけることができる認証方法の1つです。
 Basic認証をかけると、認証をかけたWebサイトにアクセスしようとしたとき、
 認証ダイアログが立ち上がって、ユーザー名(ID)とパスワードの入力が求められます。
 簡易的な認証のため、公開前のWEBサイトの関係者のみの閲覧などの目的でも使用できます。
 
 

導入方法

 今回はOSはlinuxNginxは導入済みを想定。
 導入方法はこちら

htpasswd コマンドインストール

$ sudo yum install httpd-tools

 

.htpasswd ファイルの作成

ユーザ名とパスワードを記載

$ sudo htpasswd -c /etc/nginx/.htpasswd alpha
 New password: alpha1
 Re-type new password: alpha1
 Adding password for user username

$ cat /etc/nginx/.htpasswd
alpha:$alpha1$1HL4gU0L$Sm5cgGBydSUV5uo9Z8aNe0

nginxの設定ファイルの追記

 Basic認証と.htpasswd ファイルを読み込みの記載。

$vim /etc/nginx/nginx.conf
…
server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html index.htm;

    location /page_a{

        #認証時に表示されるメッセージ
        auth_basic "Restricted";

        #.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd; 

        proxy_pass: http://127.0.0.1:8000;
    }
}
…

 ※proxy_passは忘れがちですが、gunicornとかWSGI使ってると404エラーが出ます。
 

再起動

$sudo service nginx restart

 以上でページA(page_a)にはBasic認証がかかりました!
 サイトにアクセスするとBASIC認証がかかっていることが確認できます。

image.png
 

異なるページにBasic認証をかける

 先ほど作成した.htpasswdとは異なるファイルにユーザB(beta)・パスを記載。

$ sudo htpasswd -c /etc/nginx/.htpasswd_beta beta
 New password: beta2
 Re-type new password: beta2
 Adding password for user username

$ cat /etc/nginx/.htpasswd_beta
beta:$beta2$1HL48ana$3OxkzGBydDeyzsc1nURil1

nginx.confへの追記。

$vim /etc/nginx/nginx.conf
…
server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html index.htm;

    location /page_a{ 
        #認証時に表示されるメッセージ
        auth_basic "Restricted";
        #.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd; 
        proxy_pass: http://127.0.0.1:8000;
    }

    location /page_b{
        auth_basic "Restricted";

        #ページBの.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd_beta; 
        proxy_pass: http://127.0.0.1:8000;
    }
}
…

再起動

$sudo service nginx restart

 以上でページBにもBasic認証がかけることができました。

最後に

 今回は別々のページで同一のユーザ・パスが使えないようにするため、.htpasswdを分けました。
 単純に複数ページに認証をかけるだけなら、分ける必要がないです。
 用途に合わせた設定をお勧めします。

 最後まで読んでいただきありがとうございました。

 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0