めも。‎ > ‎

lighttpd

一時期軽量webサーバとして話題になったlighttpdについて、適当にメモ書く。

バーチャルホスト

lighttpのvirtual host設定はこんな感じでやるわけです。

ホスト名ベースだとこんな感じで、$HTTP["host"]で条件分けします
$HTTP["host"] == "www2.example.co.jp" {
       include "sites-enabled/www2"
}

IPアドレス/ポートベースだと$SERVER["socket"]で条件分けします。
ホストは192.168.220.10と192.168.220.11の二つipを持つと思いねぇ。
$SERVER["socket"] == "192.168.220.10:80" {
include "sites-enabled/site1"
}

$SERVER["socket"] == "192.168.220.10:81" {
include "sites-enabled/site2"
}

$SERVER["socket"] == "192.168.220.11:80" {
include "sites-enabled/site3"
}


で、IPアドレス/ポートベースのバーチャルホスト設定をすると、$SERVER["socket"]にて条件指定されたソケットをlistenしに行きます。
ここで問題が一つ。この状況下でlighttpd.confの設定が以下の時、どうなるか。
server.port  = 80
#server.bind  = "127.0.0.1"

bindするipアドレスを指定しないと、こんなエラーが出ます。
(network.c.379) can't bind to port: 192.168.220.10 80 Address already in use

lighttpdはserver.bind:server.portにbindした後に、$HTTP["host"]の条件式へbindしに行くようです。で、server.bindの初期値は0.0.0.0(INADDR_ANY)だから、まず0.0.0.0:80へbindして、次に192.168.220.10:80へbindしようとする。しかし、0.0.0.0:80へbindした時点で192.168.220.10:80もbindしてる→already in useになると。

なので、先に192.168.220.10:80へbindしないようにすればいい。
server.port  = 80
server.bind  = "127.0.0.1"
ということでした。
Comments