Lighttpdで複数ドメイン運用している中でBASIC認証の設定を行う

2011年2月12日

用途

お客様向けのデモ用サーバで、BASIC認証を使ってパスワード保護してテスト公開をしたい場面が多々ある。
ありがたいことにお客様は複数いて、お客様毎にドメインやID/パスワードの設定がそれぞれに異なる。
apacheの場合には、.htaccessで都度追加すれば良かったのだけど、Lighttpdでは、一括して設定する必要がある。

設定例

apacheの場合、以下のような.htaccessファイルを作成して、必要なディレクトリに設置していた。

AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd

異なるドメインでも、それぞれのドキュメントツリーの中に配置すればそれで解決だった。

Lighttpdの場合、/etc/lighttpd/conf.d/auth.confに以下のように記述する。

$HTTP["host"] == "www.mybenjo.net" {
  $HTTP["url"] =~ "^/test/hoge" {
    auth.backend = "htpasswd"
    auth.backend.htpasswd.userfile = "var/www/.htpasswd"
    auth.require = ("/test/hoge" =>
                ("method"  => "basic",
                 "realm"   => "Protected Area",
                 "require" => "valid-user"
                )
               )
  }
}

hostとurlで2重にチェックを入れる部分がミソ。

また、認証設定を生かすために、/etc/lighttpd/modules.conf も設定する。

server.modules = (
#  "mod_access",
#  "mod_alias",
"mod_auth", ← # のコメントアウトを外す
#  "mod_evasive",
#  "mod_redirect",
#  "mod_rewrite",
#  "mod_setenv",
#  "mod_usertrack",
)
include "conf.d/auth.conf" ← 設定ファイルの記述が無いので追記する

設定後、lighttpdをリスタートすることで動作する、はず。
なお、mod_fastcgiの設定を呼び出す前に記述必要があることに注意が必要。

When loaded together with mod_fastcgi, mod_auth must be loaded before mod_fastcgi. Or else users will experience long delays when login in and sysadmins will probably not find out the source of the problem due to the lack of meaningful error messages.

http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModAuthより。

稼動時の柔軟性はトレードオフか

Lighttpdは、apacheのように、.htaccessで設定を追加することが出来ない。
apacheでも、.htaccessで設定を追加出来ない設定にも出来るのであるが、設定変更の都度、httpd.confと関連するファイルを触るよりは色々と楽だ。
だが、その分だけ負荷が増えているのも事実で、そこに関してはLighttpdの潔いところを認識した方が良いと思う。でも、プロバイダ向けのサーバ用途などには向いていないのも事実なのだと思う。