2007年11月16日

Lighttpd+PHP FastCGI升级小记

作者 非鱼

其实在Linux下升级软件真是一件相当愉快的事情,即便是采用源代码编译安装的方式而不是Yum或者Apt的方式,也同样简单,更重要的是,不需要重启服务器。(当然,你要升级内核就除外了。)

Lighttpd的官方声明中强调所有的1.4使用者都应该尽快升级到1.4.18,似乎有一个类似缓冲区溢出之类的bug存在,于是wget下载回源码,解压,./configure && make && make install,搞定。

然后发现PHP也已经升级到了5.2.5,而服务器上用的还是5.2.1的版本,很久没升级了。同样下载回源码,解压,不过PHP的配置项里面设的参数比较多,每次都输一遍是比较烦的,还好,phpinfo()会自动输出上次的编译配置,复制下来,删除里面所有的单引号,就可以用了,同样make && make install,然后重启服务service lighttpd restart,一切OK,访问一下网站体验一下新版本的感觉吧,噫,网站打不开了!

查看服务器里面的进程,没有lighttpd,看来启动不成功,再来一次service lighttpd start,明明显示OK了,再看进程还是没有。来到lighttpd的安装目录的sbin目录下,执行./lighttpd -f /etc/lighttpd/lighttpd.conf,OK,输出错误消息,PHP无法加载,说我的PHP不是FastCGI模式的,要我使用php -v看看版本,输出的版本应该显示(fastcgi),而不是cgi或者cli。这台服务器上的PHP是以FactCGI的模式与Lighttpd协作的。真是见鬼了,这服务器都这样跑了半年多了,难道是升级的问题。来到php的目录下执行./php -v,输出的版本里面显示的是(cli),嗯。的确是个很奇怪的问题。看一下编译参数,enable-fastcgi明明已经写了嘛。再看看php的bin目录下,嗯?有个php-cgi文件,执行一下看看,./php-cgi -v,bingo,这里显示的是(fastcgi),于是把lighttpd.conf里面所有的指向php文件的设置改成php-cgi,再启动,成功了。

既然已经做了,那干脆把加速器也装上吧,以前一直没有装Zend Optimizer或者eAccelerator,因为流量不大。上网一看,有个评测居然说装了Zend以后网站反而会变慢,而eAccelerator则能加快一倍还多,好吧,反正也没有运行什么加密的代码,就装eAccelerator好了。按照说明一步一步的做,下载源码,解压,在解压目录里执行phpize,然后./configure,需要指定php-config的位置,因为不在Path里,然后make && make install,还要自己去改php.ini。跑到php安装目录的lib下面一看,OMG,居然没有php.ini文件。看来是第一次安装的时候忘记了。

从php的源码目录里把php.ini-dist复制过来并改名,需要改一下extentions目录的设置,否则会找不到刚刚编译的那个so文件,有必要的话还要改include_path(比如使用Zend framework的话)。然后在最后加上一段eAccelerator的参数,创建它需要的那个缓存目录,重启lighttpd,再看看phpinfo文件,OK,出来了。

结束。