今まで、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のサイトには、そこそこ新しい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もインストールできました。)
何もしていしないと /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 Errorld: 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
Version 1.5から、cgiは、spawnfcgi経由で行うことになりましたので、今までの設定は使えません。ちょっと設定の手間も増えます。
$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
$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から呼び出している今回の場合だと参照できません。
Last Update:
$Date: Sun, 03 May 2009 12:38:26 +0900 $