開発者ドキュメント

Ubuntu14.04でNginxを使用してパスワード認証を設定する方法

序章

Webサーバーをセットアップするとき、アクセスを制限したいサイトのセクションがしばしばあります。 多くの場合、Webアプリケーションは独自の認証および承認方法を提供しますが、これらが不十分または利用できない場合は、Webサーバー自体を使用してアクセスを制限できます。

このガイドでは、Ubuntu14.04で実行されているNginxWebサーバーでアセットをパスワードで保護する方法を示します。

前提条件

開始するには、Ubuntu14.04サーバー環境にアクセスする必要があります。 管理タスクを実行するには、sudo権限を持つroot以外のユーザーが必要です。 このようなユーザーを作成する方法については、Ubuntu14.04初期サーバーセットアップガイドに従ってください。

まだ行っていない場合は、次のように入力して、マシンにNginxをインストールします。

  1. sudo apt-get update
  2. sudo apt-get install nginx

パスワードファイルを作成する

まず、ユーザー名とパスワードの組み合わせを保持するファイルを作成する必要があります。 これを行うには、サーバーですでに使用可能なOpenSSLユーティリティを使用します。 または、apache2-utilsパッケージに含まれている専用のhtpasswdユーティリティを使用することもできます(NginxパスワードファイルはApacheと同じ形式を使用します)。 以下の方法を選択してください。

OpenSSLユーティリティを使用してパスワードファイルを作成する

サーバーにOpenSSLがインストールされている場合は、追加のパッケージなしでパスワードファイルを作成できます。 /etc/nginx構成ディレクトリに.htpasswdという隠しファイルを作成して、ユーザー名とパスワードの組み合わせを保存します。

このコマンドを使用して、ファイルにユーザー名を追加できます。 ユーザー名としてsammyを使用していますが、任意の名前を使用できます。

  1. sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"

次に、次のように入力して、ユーザー名の暗号化されたパスワードエントリを追加します。

  1. sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

追加のユーザー名に対してこのプロセスを繰り返すことができます。 次のように入力すると、ユーザー名と暗号化されたパスワードがファイル内にどのように保存されているかを確認できます。

  1. cat /etc/nginx/.htpasswd
Output
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Apacheユーティリティを使用してパスワードファイルを作成する

OpenSSLはNginx認証用のパスワードを暗号化できますが、多くのユーザーは専用のユーティリティを使用する方が簡単だと感じています。 apache2-utilsパッケージにあるhtpasswdユーティリティは、この機能を十分に果たします。

次のように入力して、サーバーにapache2-utilsパッケージをインストールします。

  1. sudo apt-get update
  2. sudo apt-get install apache2-utils

これで、htpasswdコマンドにアクセスできるようになりました。 これを使用して、Nginxがユーザーの認証に使用できるパスワードファイルを作成できます。 この目的のために、/etc/nginx構成ディレクトリ内に.htpasswdという隠しファイルを作成します。

このユーティリティを初めて使用するときは、-cオプションを追加して、指定したファイルを作成する必要があります。 コマンドの最後にユーザー名(この例ではsammy)を指定して、ファイル内に新しいエントリを作成します。

  1. sudo htpasswd -c /etc/nginx/.htpasswd sammy

ユーザーのパスワードを入力して確認するように求められます。

追加する追加ユーザーの-c引数は省略してください。

  1. sudo htpasswd /etc/nginx/.htpasswd another_user

ファイルの内容を表示すると、各レコードのユーザー名と暗号化されたパスワードを確認できます。

  1. cat /etc/nginx/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Nginxパスワード認証を構成する

Nginxが読み取れる形式のユーザーとパスワードを含むファイルができたので、保護されたコンテンツを提供する前に、このファイルをチェックするようにNginxを構成する必要があります。

制限を追加するサーバーブロック構成ファイルを開くことから始めます。 この例では、UbuntuのNginxパッケージを介してインストールされたdefaultサーバーブロックファイルを使用します。

  1. sudo nano /etc/nginx/sites-enabled/default

内部では、コメントが削除され、ファイルは次のようになります。

/ etc / nginx / sites-enabled / default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}

認証を設定するには、制限するコンテキストを決定する必要があります。 他の選択肢の中でも、Nginxを使用すると、サーバーレベルまたは特定の場所内に制限を設定できます。 この例では、ロケーションブロックを使用してドキュメントルート全体を制限しますが、このリストを変更して、Webスペース内の特定のディレクトリのみをターゲットにすることができます。

このロケーションブロック内で、auth_basicディレクティブを使用して認証をオンにし、資格情報の入力を求めるときにユーザーに表示するレルム名を選択します。 auth_basic_user_fileディレクティブを使用して、作成したパスワードファイルをNginxにポイントします。

/ etc / nginx / sites-enabled / default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

終了したら、ファイルを保存して閉じます。 Nginxを再起動して、パスワードポリシーを実装します。

  1. sudo service nginx restart

これで、指定したディレクトリがパスワードで保護されているはずです。

パスワード認証を確認する

コンテンツが保護されていることを確認するには、Webブラウザで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されます。

正しいクレデンシャルを入力すると、コンテンツにアクセスできるようになります。 間違ったクレデンシャルを入力するか、「キャンセル」をクリックすると、「認証が必要です」というエラーページが表示されます。

結論

これで、サイトの基本認証を設定するために必要なものがすべて揃ったはずです。 クレデンシャルがプレーンテキストでサーバーに送信されないように、パスワード保護をSSL暗号化と組み合わせる必要があることに注意してください。 Nginxで使用する自己署名SSL証明書を作成する方法については、このガイドに従ってください。 商用証明書のインストール方法については、このガイドに従ってください。

モバイルバージョンを終了