server-memo.net

nginxでベーシック(Basic)認証を設定する方法

   

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 "認証名を設定";」で設定した認証名が表示されています。

nginx_basic_01

google chromeでアクセスした際の認証画面

nginx_basic_00

 - nginx