前書き

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

このガイドでは、Ubuntu 14.04で実行されているNginx Webサーバー上のアセットをパスワードで保護する方法を示します。

前提条件

開始するには、Ubuntu 14.04サーバー環境にアクセスする必要があります。 管理タスクを実行するには、 `+ sudo +`権限を持つ非rootユーザーが必要です。 このようなユーザーを作成する方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [Ubuntu 14.04初期サーバーセットアップガイド]に従ってください。

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

sudo apt-get update
sudo apt-get install nginx

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

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

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

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

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

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

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

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

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

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

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

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

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

sudo apt-get update
sudo apt-get install apache2-utils

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

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

sudo htpasswd -c /etc/nginx/.htpasswd

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

追加したいユーザーがいる場合は、 `+ -c +`引数を省略します。

sudo htpasswd /etc/nginx/.htpasswd

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

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

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

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

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

sudo nano /etc/nginx/sites-enabled/

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

/ 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;


   }
}

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

sudo service nginx restart

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

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

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

image:https://assets.digitalocean.com/articles/nginx_password_1404/password_prompt.png [Nginxパスワードプロンプト]

正しい資格情報を入力すると、コンテンツへのアクセスが許可されます。 間違った資格情報を入力するか、「キャンセル」をクリックすると、「承認が必要です」というエラーページが表示されます。

image:https://assets.digitalocean.com/articles/nginx_password_1404/unauthorized_error.png [Nginx不正エラー]

結論

これで、サイトの基本認証をセットアップするために必要なものがすべて揃ったはずです。 パスワード保護をSSL暗号化と組み合わせて、資格情報がプレーンテキストでサーバーに送信されないようにする必要があることに注意してください。 Nginxで使用する自己署名SSL証明書を作成する方法については、https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntuに従ってください-14-04 [このガイド]。 商用証明書のインストール方法については、https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority [このガイド]をご覧ください。