ウェブサイト検索

Nginx で基本 HTTP 認証を構成する方法


基本 HTTP 認証は、単純なユーザー名/パスワード認証を設定することで、Web サイト/アプリケーション、またはその一部へのアクセスを制限するセキュリティ メカニズムです。これは基本的に、HTTP サーバー全体、個々のサーバー ブロック (Apache の仮想ホスト)、またはロケーション ブロックを保護するために使用できます。

こちらもお読みください: NGINX で名前ベースおよび IP ベースの仮想ホスト (サーバー ブロック) をセットアップする方法

名前が示すように、これは信頼できる安全な方法ではありません。他のより信頼性の高いセキュリティ対策と組み合わせて使用する必要があります。たとえば、Web アプリケーションが HTTP で実行されている場合、ユーザーの資格情報はプレーン テキストで送信されるため、HTTPS を有効にすることを検討する必要があります。

このガイドの目的は、Web アプリケーション (管理者側など) 上のプライベート/特権コンテンツを保護するために、小さいながらも便利なセキュリティ層を追加できるようにすることです。これを使用して、まだ開発段階にある Web サイトやアプリケーションへのアクセスを防ぐこともできます。

要件

  1. CentOS/RHEL 7 に LEMP スタックをインストールする
  2. Ubuntu/Debian に LEMP スタックをインストールする

HTTP認証ユーザーファイルの作成

まず、username:password のペアを保存するファイルを作成する必要があります。このファイルを作成するには、Apache HTTP サーバーのhtpasswd ユーティリティを使用します。

まず、htpasswd ユーティリティを提供するパッケージである apache2-utils または httpd-tools がシステムにインストールされていることを確認します。そうでない場合は、適切なコマンドを実行します。ディストリビューションをインストールするには:

yum install httpd-tools		[RHEL/CentOS]
sudo apt install apache2-utils	[Debian/Ubuntu]

次に、以下の htpasswd コマンドを実行して、最初のユーザーのパスワード ファイルを作成します。 -c オプションは、passwd ファイルの指定に使用されます。[Enter] を押すと、ユーザー パスワードの入力を求められます。

htpasswd -c /etc/nginx/conf.d/.htpasswd developer

2 人目のユーザーを追加します。ここでは -c オプションを使用しないでください。

htpasswd /etc/nginx/conf.d/.htpasswd admin

パスワード ファイルの準備ができたので、アクセスを制限する Web サーバーの部分の構成に進みます。パスワード ファイルの内容 (ユーザー名と暗号化されたパスワードを含む) を表示するには、以下の cat コマンドを使用します。

cat /etc/nginx/conf.d/.htpasswd 

Nginx の HTTP 認証を構成する

前に述べたように、Web サーバー、単一の Web サイト (サーバー ブロックを使用)、または場所ディレクティブへのアクセスを制限できます。これを実現するには、2 つの便利なディレクティブを使用できます。

  • auth_basic – 「HTTP 基本認証」プロトコルを使用したユーザー名とパスワードの検証を有効にします。
  • auth_basic_user_file – パスワード ファイルを指定します。

Nginx 仮想ホストのパスワード保護

すべてのサーバー ブロックに適用される Web サーバー全体の基本認証を実装するには、/etc/nginx/nginx.conf ファイルを開き、http コンテキストに以下の行を追加します。

http{
	auth_basic           "Restricted Access!";
    	auth_basic_user_file /etc/nginx/conf.d/.htpasswd; 
	……...
}

Nginx Web サイトまたはドメインをパスワードで保護する

特定のドメインまたはサブドメインの基本認証を有効にするには、/etc/nginx/conf.d/ または /etc/nginx/conf/sites-available にある設定ファイルを開きます。 Strong> (Nginx のインストール方法に応じて)、サーバー ブロックまたはコンテキストに以下の構成を追加します。

server {
	listen 			80;
	server_name    	  example.com;
	auth_basic           	"Restricted Access!";
    	auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	location /  {
		……..
	}
	……...
}

Nginx の Web ディレクトリをパスワードで保護する

location ディレクティブ内で基本認証を有効にすることもできます。以下の例では、/admin ロケーション ブロックにアクセスしようとするすべてのユーザーは認証を求められます。

server {
	listen 			80;
	server_name    	example.com www.example.com;
	
	location / {
		……..
	}
	location /admin/ {
		auth_basic           	"Restricted Access!";
    		auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	}

	location /public/{
		auth_basic  off;	#turns off basic http authentication off for this block
	}
	……..
}

基本的な HTTP 認証を構成している場合、Web サーバー、サブドメイン、またはサイトの特定の部分 (実装場所に応じて) にアクセスしようとするすべてのユーザーは、以下のスクリーンショットに示すように、ユーザー名とパスワードの入力を求められます。 。

ユーザー認証に失敗した場合、以下に示すように「401 Authorization Required」エラーが表示されます。

詳細については、「基本 HTTP 認証によるアクセスの制限」を参照してください。

以下の役立つ Nginx HTTP サーバー関連ガイドもお読みください。

  1. Nginx で Web ディレクトリをパスワードで保護する方法
  2. Nginx のセキュリティを確保、強化し、パフォーマンスを向上させるための究極のガイド
  3. Nginx の Let’s Encrypt SSL 証明書を使用した HTTPS のセットアップ

このガイドでは、Nginx HTTP Web サーバーに基本的な HTTP 認証を実装する方法を説明しました。ご質問がある場合は、以下のフィードバック フォームをご利用ください。