NginxのWebサイトにBasic認証を設定する方法

NginxのWebサイトにBasic認証を設定する方法

Webサーバー用ソフトとして人気のあるNginxで、公開しているWebサイトに簡易的な認証機能を追加したいときは、Basic認証(ベーシック認証、HTTP基本認証)を追加するのが設定も簡単でお勧めです。

そこでここでは、NginxでWebサイトにBasic認証を追加する方法を解説します。

Basic認証とは

Basic認証とは、WebサイトへのアクセスにユーザーIDとパスワードを使った認証によってアクセス制限をかける方法のひとつで、HTTP基本認証とも呼ばれており、ほとんどのWebサーバーソフトでは、比較的簡単な設定でWebサイト全体や特定のディレクトリに対してBasic認証を追加できます。

なお、Basic認証は、ユーザーIDとパスワードを入力して送信する際に、送信データは暗号化されず平文のまま送信されるため、インターネットに公開しているWebサイトでBasic認証によるアクセス制限を実装する場合は、少なくともHTTPSと組み合わせて通信を暗号化しておく必要があります。

また、Basic認証は、認証情報のやりとりの仕組みが単純でセキュリティレベルは高くないため、Webサイトに一時的に認証機能を追加したいときなど、限定的に使用するのが一般的です。

Basic認証の設定手順

ここからは、LinuxにインストールされたNginxで、Basic認証を設定する手順を解説します。(なお、Webサイトの基本設定は完了していることを前提とします。)

認証ユーザーの作成

まず、以下のツールをインストールして、認証で使用するユーザー情報ファイル「.htpasswd」を作成します。ここでは例として「user1」「user2」の2つのユーザー情報を作成します。

# dnf install httpd-tools
# htpasswd -c /etc/nginx/.htpasswd user1
New password: *****
Re-type new password: *****
Adding password for user user1
# htpasswd /etc/nginx/.htpasswd user2
New password: *****
Re-type new password: *****
Adding password for user user2

Nginxの設定

次にNginxの設定ファイルにBasic認証の設定を追記します。

Webサイト全体にBasic認証を設定したいときはserverディレクティブに、特定のディレクトリにのみBasic認証を設定したいときはlocationディレクティブ内に記述するのが一般的です。

# vi /etc/nginx/conf.d/mysite.conf

server {
  …
  auth_basic "Restricted"; #認証時に表示されるメッセージ
  auth_basic_user_file /etc/nginx/.htpasswd; #.htpasswdファイルのパスを指定
  …
}

最後に、設定ファイルをリロードすれば完了です。

# systemctl reload nginx

Basic認証の動作確認

Basic認証設定後にWebサイトにブラウザでアクセスすると、以下のようにユーザー情報を入力するためのポップアップが表示され、上記で設定したユーザー名とパスワードを使って認証します。

NginxのWebサイトにBasic認証を設定する方法

ちなみに、認証に失敗すると以下のような画面が表示されます。

NginxのWebサイトにBasic認証を設定する方法

あとがき

Basic認証のセキュリティを少しでも強化したい場合は、IPアドレスによる制限を組み合わせるとよいでしょう。