nginxでベーシック認証を掛ける方法です。
httpd-tools(htpasswd)インストール
nginxでベーシック認証を設定するために必要な「.htpasswd」(パスワード)ファイルは「htpasswd」コマンドで作成するのですが、「nginx」しかインストールしていない環境の場合「htpasswd」がインストールされていない場合があります。
CentOSの場合、htpasswdコマンドは「httpd-tools」パッケージに含まれているので、「httpd-tools」をインストールします。
(すでに「htpasswd」コマンドがインストールされている場合は、この作業は行う必要がありません)
# yum install httpd-tools
※DebiaやUbuntuの場合は「apache2-utils」というパッケージに含まれています。
.htpasswdファイル作成
htpasswdコマンドで.htpasswdファイルを作成します。
.htpasswdファイル作成方法
htpasswd -c /フルパス/.htpasswd ユーザ名
「-c」オプションは初回のみ設定します。
認証用のユーザを追加する場合は「-c」オプションは必要ありません。
「-c」オプションを付けてしまうと、事前に設定してあったユーザが消えてしまいますので注意してください。
.htpasswdファイル作成例
今回は「/etc/nginx/conf.d」ディレクトリ内に、認証用のユーザとして「munin」を指定した「.htpasswd」ファイルを作成していきます。
# htpasswd -c /etc/nginx/conf.d/.htpasswd munin New password: Re-type new password: Adding password for user munin
「New password:」と「Re-type new password:」2度パスワードの入力を求められるので、設定したいパスワードを2度同じように入力してください。
「.htpasswd」ファイルの作成が完了しましたら、念のために作成したファイルを確認しておきましょう。
# cat /etc/nginx/conf.d/.htpasswd munin:$apr1$4kDGxg/l$LRPjH55Q1SUD9YQw/vRWw.
無事設定が完了していると、このようにユーザ名と暗号化されたパスワードが記述されていることが確認できます。
nginx設定
「nginx」でベーシック認証を設定する場合、apacheではおなじみの「.htaccess」は使用できません。
ですので、ベーシック認証の設定は直接「nginx」の設定ファイルに記述する形になります。
設定内容
ベーシック認証を有効化するためには、下記の2行を「nginx」の設定ファイルに追加します。
auth_basic "認証名を設定"; auth_basic_user_file .htpasswdファイルをフルパスで指定;
たとえば「http://www.example.com/」といったURLにベーシック認証を掛けたい場合は、下記のように「/」locationに設定を追加するという形になります。
location / { root /usr/share/nginx/html; index index.html index.htm; auth_basic "Basic Authentication"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; }
「http://www.example.com/hoge/」といったURLにベーシック認証を掛けたい場合は、下記のように「/hoge/」用のlocationディレクティブを作成してそこに設定を記述してください。
location /hoge/ { auth_basic "Basic Authentication"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; }
設定反映
設定が完了しましたら、「nginx」を再起動して設定を反映させます。
CentOS7の場合
# systemctl restart nginx
CentOS6以前の場合
# service nginx restart
nginxのコマンドを使用する場合
# nginx -s reload
動作確認
ベーシック認証を設定したURLにアクセスして動作確認を行ってみてください。
設定がうまくいっていれば、下記のような「ユーザ名」と「パスワード」による認証画面が表示されるようになります。
Microsoft Edgeでアクセスした際の認証画面
赤枠で囲った部分に「auth_basic "認証名を設定";」で設定した認証名が表示されています。
コメント