Lighttpd 1.5 and PHP5 + HG written by B.S.W


今まで、Lighttpd 1.4を使用してきたのですが、サーブレットコンテナとつなぐajp13のプロトコルの設定方法が分からなかったので、1.5にあげることにしました。(1.5はまだ開発段階ですが、2.0の開発も始まっているようです。)

ただし、MacPortで配布されている、lighttpd-devel @1.5.0-r1691は、空白ページを返すバグがあります。

http://trac.macports.org/ticket/18266

そのバグに引っかかり、サイトが表示できなくなったので、仕方なくソースからコンパイルすることにしました。
(ただ、httpsだとちゃんと表示できるという変わったバグで、mmap周りが絡んでいたようです。)

Lighttpd のソースのダウンロード

Lighttpdのサイトには、そこそこ新しいtarballがありますが、レポジトリーから落とすことがお勧めなのでSubversionから落とします。1.5はブランチが作られていないようなので、trunkのものをそのまま落とします。使用する、プロトコルは、svnだけとなります。

Ver 1.5の落とし方

$ svn checkout 
  svn://svn.lighttpd.net/lighttpd/trunk/ 

ちなみにVer1.4のブランチの落とし方は

$ svn checkout \
  svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x/

残念ながら、httpを使ったWebdavでのアクセスはないようです。開発者用には、svn+sshが提供されています。

開発者用

$svn checkout svn+ssh://svn@svn.lighttpd.net/lighttpd/trunk
  or
$svn checkout \
 svn+ssh://svn@svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x/

ダウンロードしたら、以下のものを必ず実行してください。

 $ ./autogen.sh 

使用しているTiger & Macportだと、Barkrey DB 4.1.25以降があるのにないと言ってSubversionがインストールできませんでした。(スクリプトを手直しすれば、Subversionもインストールできました。)

Configuration and Compile

何もしていしないと /usr/local/sbinにインストールされます。MacPortだと、/opt/local/sbinにインストールされます。
将来は、MacPortのレポジトリーで使って行きたいので、defaultのままにしたいと思います。
また、defaultだとmoduleが、sharedになります。一度、staticで作ってみましたが、configファイルの書き方が、まずいのかちゃんと起動しませんでした。

SSLを使用したいので、opensslのパスを指定して、configrationします。

Configuration
$ ./configure --with-openssl=/opt/local/bin

このまますぐにcompileできるといいのですが、network.cのソースに書かれている関数がリンクされないようで、compileするとエラーになります。

Link Error
ld: Undefined symbols:
_network_get_backend_info_by_type
_network_get_backends

ほかにも同様なファイル、connections.c, response.c, request.c, server.c, configfile.c,configparser.c, proc_open.cがあります。

仕方がないので、lilghttpdの共通ライブラリーらしきliblightcomb.laを作る際に、それらのファイルも盛り込んでもらうようにsrc/Makefileに依存関係を書き込みます。また、gmakeでないと上手くコンパイルできません。

src/Makefileの修正
am__objects_1 = liblightcomp_la-buffer.lo liblightcomp_la-log.lo \
           :
           :
liblightcomp_la-timing.lo \
network.lo connections.lo response.lo request.lo server.lo \
configfile.lo configparser.lo proc_open.lo

Make

$gmake
$sudo gmake install
Tips:
前回、./configureを行った設定を見たい場合は、config.statusに書かれています。

Version 1.5から、cgiは、spawnfcgi経由で行うことになりましたので、今までの設定は使えません。ちょっと設定の手間も増えます。

PHP5の設定

/opt/local/etc/lighttpd/lighttpd.conf の編集
$HTTP["url"] =~ "\.php$" {
   proxy-core.balancer = "round-robin"
   proxy-core.allow-x-sendfile = "enable"
  #  proxy-core.check-local = "enable"
   proxy-core.protocol = "fastcgi"
   proxy-core.backends = ( "unix:/tmp/php-fastcgi.sock" )
   proxy-core.max-pool-size = 16
  }

PHPの起動方法

sudo /opt/local/bin/spawn-fcgi \   
-s /opt/local/var/run/php-fastcgi.sock\
-f /opt/local/bin/php-cgi -u www -g www -C 5 \
-P /opt/local/var/run/php-fastcgi.pid

Merucuralの設定

/opt/local/etc/lighttpd/lighttpd.conf の編集
$HTTP["url"] =~ "^/hgwebdir" {
   proxy-core.balancer = "round-robin"
   proxy-core.protocol = "fastcgi"
   proxy-core.backends = ( "unix:/opt/local/var/run/lighttpd/hgwebdir.sock" )
   proxy-core.rewrite-request = (
   "_pathinfo" => ( "^/hgwebdir(/.*)" => "$1" )
   )
  }

Merucurialの起動方法

sudo /opt/local/bin/spawn-fcgi \
-s /opt/local/var/run/lighttpd/hgwebdir.sock \
-f /path/to/hgwebdir.fcgi \
-u www -g www \
-P /opt/local/var/run/hgwebdir.pid

/path/to/は、hgwebdir.fcgiをインストールしたフォルダーに変更してください。

Lighttpd で、PATH_INFOが小文字になるとか、上手く処理されないという話がありました。また、configuration fileのpathが間違っていても、エラーにはなりませんので、それらのLogを出す仕組みを作ってhgwebdir.fcgiに入れてみました。常用で使う必要はないと思います。

hgwebdirの改造

gConfigPath= "/<absolution path>/"
gConfigFile="hgweb.config"
gLogfFile="hgwebdir.log" 
def make_web_app():
return hgwebdir(gConfigPath+gConfigFile) def web_app_wrap(app_maker): application = app_maker() def run_wsgi(env, respond): myCurrPath = os.getcwd() myLog = open(gConfigPath+gLogfFile,'a') print >> myLog, "PATH_INFO:"+env['PATH_INFO'], \        "ConfigfileAccess=",os.access(gConfigPath+gConfigFile,os.R_OK) myLog.close() return application(env, respond) return run_wsgi WSGIServer(wsgiapplication(make_web_app)).run() #WSGIServer(web_app_wrap(make_web_app)).run()

<absolution path>は、hgwebdirをインストールしたパスを絶対パスで書いてください。logを出したいときは、#WSGIServer(web_app_wrap(make_web_app)).run()のコメントマークを外して、WSGIServer(wsgiapplication(make_web_app)).run()にコメントマークをつけます。

hgwebdir.fcgiからの相対パスでかい書いてしまうと、spawn-fcgiから呼び出している今回の場合だと参照できません。


Merucurial Site Image


Last Update:
$Date: Sun, 03 May 2009 12:38:26 +0900 $