VirtualHostでBasic認証を設定

開発環境でBasic認証を設定したときのメモ。

部分的に対応した案件が、その後、自分の手をはなれて進行していって
Basic認証のきいたプレビューサーバへアップされたのを境に挙動がおかしくなった事があり
エラーの原因を切り分けのために、開発機でBasic認証できる環境を用意しました。

.htaccessを置くやり方でもよかったんですが
そもそも開発機だし、Apacheの根っこの設定を自由にさわれるんだから、回りくどいコトせず直接書けばええやん!
…ということで、開発用パソコンのApacheでVirtualHostへ設定したときの内容が具体例になっています。
ニッチな例です。

httpd-vhosts.conf にBasic認証の設定を追記

まず、プロジェクトごとにポートを割り振っているVirtualHost 設定ファイルを開き

C:\(Apacheインストールディレクトリまでのパス)\conf\extra\httpd-vhosts.conf

Basic認証を設定したいプロジェクトを定義している部分を確認。
この例だと81番ポートを割り振ったプロジェクトへ認証をかけます。

<VirtualHost *:81>
	DocumentRoot "C:/dummyName/projectName/WebContent"
	
	<Directory "C:/dummyName/projectName/WebContent">
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		Allow from all
	</Directory>
	
</VirtualHost>

この <Directory … > ~ </Directory> に設定を追記します。
こんな感じ。

<VirtualHost *:81>
	DocumentRoot "D:/dummyName/projectName/WebContent"
	
	<Directory "C:/dummyName/projectName/WebContent">
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		Allow from all
		
		AuthType Basic
		AuthUserFile "C:/dummyName/projectName/.htpasswd"
		AuthName "this is projectName"
	</Directory>
	
</VirtualHost>

追記した部分は、それぞれこういう意味です。

AuthType Basic → 認証の種類は Basic ですよー
AuthUserFile → ユーザ名+パスワードの答えがのってるファイルは”D:/dummyName/projectName/.htpasswd”にありますよー
AuthName →  ユーザ名とパスワードの入力を求めるダイアログには”this is projectName”とメッセージが表示されますよー

よくあるBasic認証の解説には AuthGroupFile /dev/null という記述もありますね。

AuthGroupFile は、グループ認証の情報がファイルがどこにあるか指定するためのものですが
Basic認証はユーザ単位で認証する仕組みなので、グループ認証の概念はありません。
よって、AuthGroupFile はあって無いようなもんです。
外部からアクセスできない開発機だし面倒なので、記述自体を省いてみましたが
使ってみた感じでは動作に問題はないようです。

ちなみに、/dev/null というのは、Unix系のシステムでのお決まりの記述で
「何も返事しない」という意図で使われます。
したがって AuthGroupFile /dev/null は
「グループ認証の情報がどこにあるか問い合わせられても返事しない」
という設定を、あえて書くという意味になるのかな。

.htpasswdを用意

前の手順で認証情報の設定ファイルの置き場所として指定した C:/dummyName/projectName/ へ
.htpasswdを作ってから置きます。

地味に手間取ってしまったので、詳しいつくり方については
.htpasswdをつくるの記事へ分けてみました。
くわしくはその記事で。

Apache再起動

ひととおり設定できたので、忘れずにApacheを再起動。
Basic認証が設定できているかブラウザから http://localhost:81/ を確認してみます。

関連記事

Pocket