§1 Core Options

§1.1 index file

index-file.namesでインデックスファイルを指定できる。

index-file.names = ("index.html", "index.xhtml", "index.php")

§1.2 document root

server.document-rootでサーバのドキュメントルートを指定できる。

server.document-root = "/srv/lighttpd/"

§1.3 アクセス制限

$HTTP["remoteip"]でリモートIPを取得できる。 url.access-denyと組み合わせることでアクセス制限ができる。

if $HTTP["remoteip"] != "192.168.1.0/24" {
  url.access-deny = ("")
}

$HTTP["useragent"]でUAを取得できる。 同様にしてUA別にアクセス制限ができる。

if =~ "MSIE" {
  url.access-deny = ("")
}

§1.4 ログの出力先

accesslog.filenameでアクセスログの出力先、server.errorlogでエラーログの出力先を設定できる。

accesslog.filename         = "/var/log/lighttpd/access.log"
server.errorlog            = "/var/log/lighttpd/error.log"

§1.5 リクエストおよびレスポンスヘッダの出力

debug.log-response-headerおよびdebug.log-request-headerにenableを指定することでログにヘッダの内容を出力できる。

debug.log-response-header = "enable"
debug.log-request-header = "enable"

debug.log-request-header-on-errorを使用するとエラーの場合のみリクエストヘッダを出力できる。

§2 mod_alias

§2.1 URLのマッピング

alias.urlでURLと物理パスのマッピングができる。

alias.url += ("/cgi-bin/" => "/var/www/cgi-bin/")

§3 mod_cgi

§3.1 CGIとして実行するスクリプトファイルの設定

CGIとして実行するスクリプトファイルの割り当て方。

cgi.assign += (".pl" => "/usr/bin/perl")
cgi.assign += (".rb" => "/usr/bin/ruby")
cgi.assign += (".php" => "/usr/bin/php-cgi")

PHPの場合、

<?php
phpinfo();
?>

とだけ書いたスクリプトをリクエストすると環境情報等を一覧にしたページが表示される。

§4 mod_setenv

§4.1 application/xhtml+xmlに対応していないUAに対してはtext/htmlで返す

XHTMLなどをapplication/xhtml+xmlとして配信する場合に、Microsoft Internet Explorer(6.0, 7.0)などのapplication/xhtml+xmlに対応していない(または望ましくない挙動をする)UAからのリクエストに対しては、Content-Typeをtext/htmlにする方法。

$HTTP["useragent"] =~ "MSIE" {
  $HTTP["url"] =~ ".*\.xhtml$" {
    setenv.add-response-header = ("Content-Type" => "text/html")
  }
}

UAにMSIEを含み、拡張子.xhtmlで終わるファイルに対するリクエストの場合はContent-Typeをtext/htmlにするようになる。 条件をネストする場合、$HTTP["url"]は一番内側に書かないと設定が適用されないので注意。

この方法だとリクエストURIからファイルの拡張子.xhtmlかどうか判断しているので、index-file.namesにindex.xhtmlを指定していて、かつリクエストURIが/で終わる場合には対応できない。 version 1.5からはリクエストされたファイルのパスを取得する$PHYSICAL["existing-path"]が導入されるので、

$PHYSICAL["existing-path"] =~ "\.xhtml$" {
  setenv.add-response-header = ("Content-Type" => "text/html")
}

というように書くことが出来るようになる。 また、mimetype.assignでMIME Typeを変えることでも同様のことができる。

$HTTP["useragent"] =~ "MSIE" {
  mimetype.assign = (".xhtml" => "text/html")
}

§5 mod_compress

§5.1 gzip圧縮されたファイルを展開した状態で表示させる

mod_setenvのsetenv.add-response-headerを使用することでレスポンスの内容エンコーディング(Content-Encoding)を指定できる。 例えば.diff.gzの拡張子を持つファイルについて、add-response-headerで内容エンコーディングにgzipやcompressを指定して返せば、UA側では解凍した状態で表示するようになる。

$HTTP["url"] =~ "\.diff\.gz" {
    setenv.add-response-header = ("Content-Encoding" => "gzip")
    mimetype.assign = (".diff.gz" =>"text/plain")
}

mod_compressのドキュメントのDisplay compressed filesには"mimetype.assign = ()"としてMIME Typeに何も設定しないように書かれているが、そのように設定するとレスポンスのContent-Typeはapplication/octet-streamになってしまう(原因は不明)。