Rocky Linux 9でNginxのパスワード認証を設定する方法

初めに

ウェブサーバーを設定する際には、アクセス制限をかけたいサイトのセクションがよくあります。ウェブアプリケーションは通常独自の認証と認可の方法を提供していますが、これが十分ではない場合や使用できない場合には、ウェブサーバー自体を使用してアクセスを制限することもできます。このガイドでは、Rocky Linux 9で実行されているNginxウェブサーバー上でアセットをパスワードで保護します。

必要条件 (Hitsuyō jōken)

始めるには、次のものが必要です。 (Hajimeru ni wa, tsugi no mono ga hitsuyō desu.)

  • Access to an Rocky Linux 9 server environment with a non-root user with sudo privileges in order to perform administrative tasks. To learn how to create such a user, follow the Rocky Linux 9 initial server setup guide.
  • Nginx installed on your system, following Steps 1 and 2 of this guide on how to install Nginx on Rocky Linux 9.

ステップ1 — パスワードファイルの作成

最初に、ユーザー名とパスワードの組み合わせを保持するファイルを作成する必要があります。サーバーにすでに利用可能な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

ステップ2:Nginxパスワード認証の設定

Nginxが読み取れる形式でユーザーとパスワードを含むファイルを手に入れたら、保護されたコンテンツを提供する前に、Nginxをこのファイルを確認するように設定する必要があります。

Rocky Linux 9にはデフォルトのテキストエディタとしてviが付属しています。viは非常にパワフルなテキストエディタですが、経験がないユーザーにとってはやや分かりにくいかもしれません。Rocky Linux 9サーバーで設定ファイルを編集する際には、より使いやすいエディタであるnanoをインストールすることをおすすめします。

  1. sudo dnf install nano -y

 

現在は、Nginxの設定ファイルを編集するためにnanoを使用できます。

  1. sudo nano /etc/nginx/nginx.conf

 

認証を設定するには、制限するコンテキストを決定する必要があります。その他の選択肢の中で、Nginxではサーバーレベルまたは特定の場所内で制限を設定することができます。

この例はサーバーレベルの制限のためのものであり、ファイル内のメインサーバ「 」ブロックにオプションを追加します。 auth_basicディレクティブは認証を有効にし、認証情報の入力を促す際にユーザーに表示される領域名を設定します。 auth_basic_user_fileディレクティブを使用して、Nginxを作成したパスワードファイルに指定します。

以下の文を日本語で表現すると、次のようになります:

「/etc/nginx/nginx.conf」

. . .
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
     . . .
}
. . .

Note

注意:どのブロックに制限を配置するかによって、サイトのどの部分にパスワードが必要かの粒度を制御することができます。この代替例では、locationブロックでドキュメントルートのみを制限しています。そして、このリストを変更して、ウェブスペース内の特定のディレクトリのみを対象にすることもできます:
/etc/nginx/nginx.conf

server {
listen 80 default_server;

. . .

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

終了したら、ファイルを保存して閉じてください。パスワードポリシーを適用するために、Nginxを再起動してください。

  1. sudo systemctl restart nginx

 

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

ステップ3 — パスワード認証の確認

あなたのコンテンツが保護されているか確認するために、制限されたコンテンツにウェブブラウザでアクセスしてみてください。

http://server_domain_or_IP

ユーザー名とパスワードの入力を求められるはずです。

Nginx password prompt

正しい認証情報を入力すると、コンテンツにアクセスできます。間違った認証情報を入力するか、「キャンセル」を選択すると、「Authorization Required(認証が必要です)」というエラーページが表示されます。

Nginx unauthorized error

結論

あなたは今、サイトの基本的な認証を設定するために必要なすべてを持っているはずです。パスワード保護は、クレデンシャルが平文でサーバーに送信されないように、TLS暗号化と組み合わせる必要があります。Rocky Linux 9上でLet’s Encryptを使用してNginxを安全にする方法については、このガイドを参照してください。

コメントを残す 0

Your email address will not be published. Required fields are marked *