BASIC(ベーシック)認証の実装
Nginxで構築したサイトに限られたユーザーのみがアクセスできるよう、BASIC認証を実装して、サイトにアクセスされた際にユーザー名とパスワードの入力を求めるようにする方法です。
環境はCentOS7。
目次
- BASIC認証用のユーザーを設定
- Nginxの設定
- 補足
BASIC認証用のユーザーを設定
BASIC認証用のユーザーを設定するには、httpd-toolsをインストールします。
yum install httpd-tools
続いて、htpasswdコマンドでユーザー名とパスワードを指定して、BASIC認証用ファイルの作成。
htpasswd -b -c /etc/nginx/.htpasswd hoge hogepass
- -b)コマンドにパスワードを含める場合
- -c)ファイルの新規作成
ユーザーを追加する場合はオプションの「-c」を外して実行します。
htpasswd -b /etc/nginx/.htpasswd fuga fugapass
認証ファイルの内容を確認。
cat /etc/nginx/.htpasswd
上記のコマンドを実行すると以下のような内容が出力されます。
hoge:$apr1$BhxC8X/o$RTaTgiwRhjISdGNfUPzfy.
fuga:$apr1$q8woRBty$mRPFeEtEcL8QLfIETHwaj0
Nginxの設定
作成したBASIC認証ファイルをNginxで読み取るように設定します。
/etc/nginx/conf.d/配下の~.confファイルを開いて、認証を求めるサーバーに対して以下のような設定を追加します。
server {
listen 80;
server_name localhost;
location / {
auth_basic 'this is not for you';
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
※ BASIC認証に必要なのは「auth_basic」と「auth_basic_user_file」の箇所。
設定後、Nginxを再起動します。
nginx -s reload
再起動後、認証ファイルを設定したサーバーにアクセスすると、ユーザー名とパスワードの入力を促すダイアログが表示され、ログインしないとサイトにアクセスできなくなります。
補足
本当はダイジェスト認証を実装する予定でしたが、Nginxはデフォルトでは対応しておらず、対応させるにはちょっと面倒なことをやらないといけなかったので、今回はBASIC認証にしました。