Nginxで基本HTTP認証を設定する方法


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

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

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

  1. Install LEMP Stack in CentOS/RHEL 7
  2. Install LEMP Stack in Ubuntu/Debian

HTTP認証ユーザーファイルを作成する

username:password のペアを保存するファイルを作成することから始めます。このファイルを作成するには、Apache HTTP Serverの htpasswd ユーティリティを使用します。

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

# 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サイト(そのサーバーブロックを使用)、またはlocationディレクティブへのアクセスを制限できます。これを実現するために2つの有用なディレクティブを使用することができます。

  • auth_basic – turns on validation of user name and password using the “HTTP Basic Authentication” protocol.
  • auth_basic_user_file – specifies the password file.

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

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

特定のドメインまたはサブドメインの基本認証を有効にするには、 /etc/nginx/conf.d/ または/etc/nginx/conf/sites-available をクリックし、次にサーバーブロックまたはコンテキストで以下の設定を追加します。

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

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認証が必要」というエラーが表示されます。

基本HTTP認証を使ったアクセス制限でより多くの情報を見つけることができます。

以下のNginx HTTPサーバー関連の便利なガイドも読んでください。

  1. How to Password Protect Web Directories in Nginx
  2. The Ultimate Guide to Secure, Harden and Improve Performance of Nginx
  3. Setting Up HTTPS with Let’s Encrypt SSL Certificate For Nginx

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