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

前書き ##

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ユーティリティを使用してパスワードファイルを作成します

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

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 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で読み取り可能です。保護されたコンテンツを提供する前に、このファイルをチェックするように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

Ubuntu14.04でNginxを使用してパスワード認証を設定する方法
Ubuntu14.04でGogsを設定する方法
Ubuntu14.04でRを設定する方法
Ubuntu14.04でUFWを使用してファイアウォールを設定する方法
Ubuntu14.04でShinyServerをセットアップする方法
Ubuntu18.04で時刻同期を設定する方法
Ubuntu18.04でDNSサーバーを設定する方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu14.04でNginxを保護する方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu16.04にNginxをインストールする方法
UbuntuとRaspbianでJavaホームを設定する方法
Ubuntu14.04でMasterlessPuppet環境をセットアップする方法
Ubuntu16.04で匿名ダウンロード用にvsftpdを設定する方法
Ubuntu14.04で本番Elasticsearchクラスターをセットアップする方法
Ubuntu16.04でApache仮想ホストを設定する方法
Ubuntu20.04でApache仮想ホストを設定する方法
Ubuntu16.04でユーザーディレクトリ用にvsftpdを設定する方法
Ubuntu16.04でPostgreSQLの起動を設定する方法
CentOS8でNginxサーバー構成ブロックを設定する方法
Ubuntu18.04サーバーで静的IPを設定する方法
CentOS8でSSHキーを設定する方法
ubuntu14.04で静的IPを設定する方法を詳しく説明します
Ubuntu14.04でRancherを使用してJenkinsを管理する方法
UbuntuでPython3を楽しくプレイする方法
Ubuntuでrootユーザーのパスワードを変更する方法
Ubuntu16.04のNginxにロギングモジュールを追加する方法
Ubuntu14.04のNginxにgzipモジュールを追加する方法
Ubuntu16.04用にGhostワンクリックアプリを設定する方法
Ubuntu14.04でHexoを使用してブログを開始する方法
Ubuntu16.04でLet'sEncryptを使用してApacheを保護する方法
Ubuntu16.04に基づいて固定IPを設定する方法
Ubuntuのnginxサーバーでhttpsを開く方法
UbuntuスタートアップでTmuxサービススクリプトを実行する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu20.04でタイムゾーンを設定または変更する方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
CentOS8にNginxをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法