Archive

Posts Tagged ‘lighttpd’

lighttpd でピリオドを含まない(拡張子無し)URL と特定拡張子の指定方法

ディレクトリや拡張子なしの URL と PHP だけバックエンドに送りたかったので正規表現でカリカリと。

最近は色んなソフトに PCRE が採用されていて便利ですね。

$HTTP["url"] =~ "/([^/.]*(\?|$))|\.php(\?|$)" {
    proxy.balance = "hash"
    proxy.server  = ( "" => ( ( "host" => "localhost", "port" => 8080) ) )
}

ちなみに、静的ファイルだけ ligttpd に処理させたいときは以下です。

$HTTP["url"] =~ “/[^/.]*(\?|$)” {

この書き方は、baz.png?foo=bar などと、クエリ付きのリクエストにも対応しています。

画像ファイルやローカルからのアクセスをログに記録しない

Apache で、アクセスログに画像ファイルや、CSS などを含めたくないときには、


SetEnvIf Request_URI "\.jpe?g$" image no_log

などと、書いて、


CustomLog /path/to/access.log combined env=!no_log

と、すれば良いですが、lighttpd には lighttpd-1.4.15/doc/accesslog.txt を見ても、選択的なアクセスログ設定には触れられていません。

logrotate の処理中に wrapper スクリプトを使うのも何ですし、どうしたもんかと思いましたが、ふと、lighhttpd には PCRE を利用してコンフィグを正規表現でガリガリ書けることを思い出しました。

と、いうことで実際に書いてみたら、期待通りの動作をしました。


$HTTP["remoteip"] !~ “^(127\.|192\.168\.)” {
$HTTP["url"] =~ “/[^/.]*(\?|$)” {
accesslog.filename = “/path/to/access.log”
}
}

上記では、拡張子が無いファイルへのリクエストのみログに記録しています。
なお、remoteip と url の入れ子を逆にしたら上手く動作しませんでした。