Lighttpd

fink入れました(Lighttpd1.5の準備)

Lighty1.5の./configureでglib2関係のエラーがでて、必要なライブラリを個々にインストールするのがだんだん面倒になってとうとうfink入れちゃいました。これまで、なんとなく導入を躊躇っていたんですけどまあ、あるものは使えってことでライブラリのインストールなんかに時間とられるのも何だし。

finkの導入自体は簡単でダウンロードしたパッケージをインストールするだけ。最後に「シェルに一行追加するよ」ってアナウンスがあるけどOKで終了。.bash_profileに/sw/bin/init.shが追加されます。あとは、必要なライブラリをコマンドラインでインストールするだけみたい。ライブラリに依存関係があればちゃんと関連を示して、これもインストールするよって言ってくれます。簡単・楽ちんです。もっと早く使えば良かった。

lighttpd-1.5.0.preがでてた

いつの間にかlighttpdのWebサイトがリニューアルされていました。しかも、lighttpd-1.5.0.preがリリースされています。ググってみたら1.5系の話題も既にたくさんあがっていたんですね。

lighttpd lighttpd-1.5.0-pre で目を引いたのは、

  1. requires glib2-2.4.0 or higher
  2. added check for leading slashes in mod_rewrite
  3. fixed compilation on FreeBSD and MacOS X
  4. added $HTTP["request-method"] and $PHYSICAL["path"] conditionals

Lighttpdでプロセスを起動せずにスパムを撃退する方法

キャッシュを有効に活かすことはmod_rewriteでも処理可能ですから不要なモジュールを使用しないという意味においては積極的にmod_cmlを導入する理由もみつからなかったのですが、こんな使い方も考えてみました。

mod_cmlの目的はサーバ内で処理できるリクエストはサーバ内で処理しできるだけrubyなりphpなりのインタプリタを起動しないで負荷を減らし高速化しようというものです。それでちょっと前に悩まされていたトラックバックスパムの撃退に利用できないか思いついた訳なんです。現在、このブログでもdrupalのtrackback.moduleにスパム撃退のコードを埋め込んでいますが、結局phpは起動されているわけでこういう不毛な処理をサーバ側追い出すことができれば実にうれしい。早速トライしてみました。

Lighttpd+mod_cmlを考えてみました

ダイナミックコンテンツをうまく利用するためのモジュールとしてmod_cmlというものがあります。mongrelで紹介されていたのが気になって調べてみることにしました。

一口にキャッシュといってもその有り様はアプリケーションにより千差万別、様々な場面が想定されるわけLighty+mod_cmlではその多様性を組込型言語luaを使ってプログラミングします。

Lighttpdのmod_cmlを使用するにはまず、lualibmemcacheをインストールして--memchacheと--luaオプションを付加してLightyをリメイクします。

tar zxvf lua-5.1.1.tar.gz 
cd lua-5.1.1
make linux
make linux install
tar jxvf libmemcache-1.4.0.rc2.tar.bz2
cd libmemcache-1.4.0.rc2
./configure
make
make install
export LUA_CFLAGS='-I/usr/local/include'
export LUA_LIBS=/usr/local/lib/liblua.a
./configure --with-memcache --with-lua
chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t \
 /usr/local/lib/mod_cml.so

Lighttpd+MongrelでRailsを動かす

Apacheでの懸案がなくなったので、またLighttpdに戻しました。良い機会なので1.4.11から1.4.13にバージョンアップも敢行。手間は大してありませんでしたが(Lighttpd関連の記事参照)アップグレードついでにMongrelを試してみることにしました。

まず、Mongrelのインストール。http_proxyはメモ代わり。いつも忘れるので。

export http_proxy=http://www.example.com:8080/
gem install mongrel

後は解説に従ってセットアップ。mod_fastcgiをコメントアウトし代わりにmod_proxyを有効にします。リクエストをLighttdで受け、複数のMongrelサーバをバックエンドバックで稼動させる構成となります。Mongrelへの振り分けはProxyモジュールで行います。proxy.balanceパラメータには、

  • hash
  • round-robin
  • fair

がありますがMongrel: Lighttpdでは、'fair'がベストだということですので'fair'を指定します。

Lighttpdアップデート

しばらくみないうち、Lighttpd1.4.13にアップデートしていました。1.4.12から13は早かったみたいです。自宅のMacOSXはまだ、1.4.11なので近いうちアップーデートしようかと思っています。

added initgroups in spawn-fcgi
removed warning about a 404-error-handler returned 404
fixed large uploads if xattr is enabled

気になるところはこのあたりなのですが、現在の設定から問題になりそうなところは404-error-handlerのところくらいですからそのままアップデートしても良さそうです。

Lighttpd自動起動(MacOSX)

start up Shell

MacOSXではLinuxのrcに相当するSystemStarterの機能を使ってlighttpdを自動起動します。ユーザインストールのサービスに関しては/Library/StartupItems/application_nameのディレクトリを作成しその配下に設定を記述します。ディレクトリ下にはapplication_nameと同じ名前の起動ファイル(通常は対象サービスを起動するシェル)とStartupParameters.plistという名前のファイルが必要です。(オプションでResources/言語名.lpoj/Localizable.settingsというローカライズ用のファイルを設置できます。)

FastCGI Config

Lighttpdのfast-cgiに関する設定は、

  • fastcgi.debug
  • fastcgi.map-extensions
  • fastcgi.server

の三種類があります

fastcgi.debug

0-65535までのFastCGIモジュールのデバッグレベルを指定します。(現状では0/1しか使用されていないようです。)

fastcgi.debug = 0
fastcgi.map-extentions

FastCGIモジュールにマッピングする拡張子を指定します。複数の拡張子を持つファイルをFastCGIモジュールにマッピングします。

fastcgi.map-extentions = ( ".php3" => ".php" )
fastcgi.server

リクエストをFastCGIモジュールへ送信するための設定。拡張子ごとにFastCGIへのハンドラを定義します。同じ拡張子に複数>のハンドルを指定することで負荷分散することが可能です。形式は以下のようになります。

FastCGI インストール

通常のCGIではリクエスト毎に起動プロセスが再起動されるためサーバへの負荷とパフォーマンスへの懸念があります。

FastCGIモジュールはWebサーバとともに常時稼動することでこの問題を回避します。また、Webサーバとの通信にUNIXドメインまたはTCP/IPを使用するため起動するプロセスを別サーバに配置することもできます。Lighttpdではこれらのリモートマシンに展開するFastCGIに対するロードバランサーを内部に持ち、例えばapache+mod_phpよりも多くのリソースをFastCGIプロセスに与えることができます。

Lighttpd config(2)

lighttpのコンフィグレイションでは独自の変数を定義して使用することができます。繰り返し使用するものは独自変数を定義したほうが保守が容易になります。

MYPRIFIX= "/var/www"
server.errorlog=MYPRIFIX+"/logs/error.log"
server.document-root=MYPRIFIX+"/myapp/public"

外部ファイルに作成したコンフィグレーションを読み込みことができます。

include "myapp.conf"

複数のアプリケーションを運用する場合、外部ファイルに記述したほうが保守が容易になります。

Lighttpd関連の記事まとめ

LighttpdをFedoraCore5にインストールしたときのメモを校正してアップしました。

Lighttpd config(1)

lighttpのコンフィグレイションはinstall時にコピーした/etc/lighttpd/lighttpd.confに記述します。

オプションの設定書式は単純に値をセットする場合とマージする場合の二通りがあります。

  • option = value(セット)
  • option += value(マージ)

この時、valueの書式は以下の通りです。

value = (<文字列>|<数値>|<論理値>>|<配列>|[+ value]*)

さらにvalueのタイプにより記述形式が決まります。

  • 文字列の場合は "text"の形式
  • 数値の場合は nn
  • 論理値の場合は"disable"または"enable"
  • 配列の場合は"(" [ "text" => ] value [,["text"=>] value ]* ")"

Lighttpdのインストール

Apache2+FastCGIに難あり?の噂を聞いたのでLighttpdをインストールしました。Railsの影響。環境はFedoraCore5です。

lighttpのコンパイルにはpcreとzlibが必要となりますので事前にインストールの確認してください。FedraCore5の場合、次のコマンドで確認できます。

#>rpm -qa | grep zlib
#>zlib-devel-1.2.3-1.2.1
#>zlib-1.2.3-1.2.1
#>rpm -qa | grep pcre
#>pcre-devel-6.3-1.2.1
#>pcre-6.3-1.2.1

インストール手順は以下の通り。基本的なインストール手順です。デフォルト設定の場合、/usr/local/sbin/lighttpdにインストールされます。

コンテンツの配信