Webサーバーをセットアップするときは、通常、アクセスできるサイトの部分を制限する必要があります。 Webアプリケーションは通常、独自の認証および承認方法を提供しますが、Webサーバーが不十分または使用できない場合は、Webサーバー自体を使用してアクセスを制限できます。
このガイドでは、Ubuntu14.04で実行されているNginxWebサーバー上のアセットをパスワードで保護する方法を示します。
まず、Ubuntu14.04サーバー環境にアクセスする必要があります。管理タスクを実行するには、 sudo
権限を持つ非rootユーザーが必要です。サーバーをお持ちでない学生は[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。
まだ行っていない場合は、次のコマンドを入力してNginxをコンピューターにインストールします。
sudo apt-get update
sudo apt-get install nginx
まず、ユーザー名とパスワードの組み合わせを保存するファイルを作成する必要があります。これを行うには、サーバー上にすでにあるOpenSSLユーティリティを使用できます。または、 apache2-utils
パッケージに含まれている専用ユーティリティ htpasswd
を使用することもできます(NginxパスワードファイルはApacheと同じ形式を使用します)。以下からお好きな方法をお選びいただけます。
OpenSSLがサーバーにインストールされている場合は、他のパッケージなしでパスワードファイルを作成できます。ユーザー名とパスワードの組み合わせを保存するために、構成ディレクトリ / etc / nginx
に .htpasswd
という名前の非表示ファイルを作成します。
このコマンドを使用して、ファイルにユーザー名を追加できます。ユーザー名として sammy
を使用しますが、任意の名前を使用できます。
sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"
次に、次のように入力して、ユーザー名の暗号化されたパスワードエントリを追加します。
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
他のユーザー名に対してこのプロセスを繰り返すことができます。次のように入力すると、ユーザー名と暗号化されたパスワードがファイルにどのように保存されているかを確認できます。
cat /etc/nginx/.htpasswd
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
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 sammy
システムは、ユーザーのパスワードを入力して確認するように求めます。
追加する他のユーザーのパラメーターについては、 -c
を省略します。
sudo htpasswd /etc/nginx/.htpasswd another_user
ファイルの内容を見ると、各レコードのユーザー名と暗号化されたパスワードがわかります。
cat /etc/nginx/.htpasswd
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
これでファイルができました。ユーザーとパスワードの形式はNginxで読み取り可能です。保護されたコンテンツを提供する前に、このファイルをチェックするようにNginxを構成する必要があります。
まず、制限を追加するサーバーブロック構成ファイルを開きます。この例では、UbuntuのNginxパッケージを介してインストールされた default
サーバーブロックファイルを使用します。
sudo nano /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を使用すると、サーバーレベルまたは特定の場所で制限を設定できます。この例では、locationブロックを使用してドキュメントルート全体を制限しますが、このリストを変更して、Webスペース内の特定のディレクトリのみを検索できます。
このロケーションブロックで、 auth_basic
ディレクティブを使用して認証をオンにし、資格情報の入力を求められたときにユーザーに表示するドメイン名を選択します。 auth_basic_user_file
ディレクティブを使用して、作成したパスワードファイルをNginxにポイントします。
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を再起動して、パスワードポリシーを実装します。
sudo service nginx restart
これで、指定したディレクトリがパスワードで保護されます。
コンテンツが保護されていることを確認するには、Webブラウザで制限されたコンテンツにアクセスしてみてください。以下に示すように、ユーザー名とパスワードのプロンプトが表示されます。
正しい資格情報を入力すると、コンテンツにアクセスできます。間違った資格情報を入力するか、[キャンセル]をクリックすると、[承認が必要]エラーページが表示されます。
これで、サイトの基本的な認証を設定するために必要なものがすべて揃ったはずです。資格情報がプレーンテキストでサーバーに送信されないように、パスワード保護をSSL暗号化と組み合わせる必要があることに注意してください。 Nginxで使用する自己署名SSL証明書を作成する方法については、[Nginxの自己署名SSL証明書を作成する方法](https://cloud.tencent.com/developer/article/1160294?from=10680)に従ってください。
その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でNginxを使用してパスワード認証を設定する方法」
Recommended Posts