Lighttpd1.5终于在osx上工作了
让lighttpd在mac osx上跑真是费劲。首先是编译,1.5需要使用gthread,因此需要glib2.6+,我使用fink来安装。很快遇到了些小麻烦,虽然glib2已经安装,但是configure始终无法找到。最后发现是因为mac自身的pkg-config优先/sw的
pkg-config,所以无法找到glib的包信息。重新调整下path,首先搜索/sw的fink的命令。编译通过了。
之后是安装php4,php5。
由于需要php4和php5同时工作,因此我使用了以下技巧:
使用2个spawn-fcgi 来spawn不同,为了方便脚本运行,将php4和php5的fastcgi程序rename为/usr/local/php4/bin/php4,/usr/local/php5/bin/php5.,这样可以分别start,stop不同的fastcgi daemon.
最有用的是,可以分别针对不同的host,将.php转发到
不同的fast-cgi server。比如blog.* 是php4, cms.*是php5等等。
不仅是这样,由于使用fastcgi,你可以将某个目录或者url直接转发到不同的php后端,这样可以将同一个php程序分别在php4,php5下面跑。在unix下面只要做个symbol link就搞定了,例如:app4,app5,
host['url'] =~ "app4.*" =>(
proxy....
)
host['url'] =~ "app5.*" =>(
proxy....
)
这点上,lighttpd比apache真是灵活很多,感觉非常方便。
说了好的,再说痛苦的, 在linux上面,lighttpd非常顺利。但是在我的mac上,很快
发现无法执行phpadmin,很奇怪的是简单的php程序可以,但是一跑phpadbmin,
lighttpd就crash了。
google半天,发现mac上用的太少了,都是1.4. 最后没办法,自己用ktrace 生成了lighttpd
的trace文件,使用kdump查看输出结果,很快,我就发现,是posix-aio出了问题。
我记得lighty的blog上说posix-aio不太稳定,实际上我在linux下面的libaio也曾经把kernel都弄死了。
而且作者在freebsd上默认编译是使用posix-aio,不幸的是,macosx属于freebsd系列。
立即验证,手动指定network-backend为gthread-aio,嗯,这下不死了,但是有些图片仍然无法显示。
看来aio还是实验性的东西。使用最传统的writev好了,果然,一切都正常了。
我提交了一个ticket,希望作者能够修正,至少默认不要用posix-aio。
Comments
Leave a Reply